marmelab/react-admin · error · Error
updateMany not implemented
Error message
updateMany not implemented
What it means
The default testDataProvider's updateMany method throws deliberately. Bulk updates are not implemented in the default provider, so tests must override it.
Source
Thrown at packages/ra-core/src/dataProvider/testDataProvider.ts:38
throw new Error('deleteMany is not implemented');
},
getList: async () => {
throw new Error('getList is not implemented');
},
getMany: async () => {
throw new Error('getMany is not implemented');
},
getManyReference: async () => {
throw new Error('getManyReference is not implemented');
},
getOne: async () => {
throw new Error('getOne is not implemented');
},
update: async () => {
throw new Error('update not implemented');
},
updateMany: async () => {
throw new Error('updateMany not implemented');
},
};
export const testDataProvider = (
overrides?: Partial<DataProvider>
): DataProvider => ({
...defaultTestDataProvider,
...overrides,
});
View on GitHub (pinned to 051f511bb0)
Solutions
- Override it: testDataProvider({ updateMany: async () => ({ data: [1, 2] }) })
- Provide a jest/vi spy for updateMany to assert calls
- Disable bulk actions in the test (Datagrid bulkActionButtons={false})
Example fix
// before
const dataProvider = testDataProvider();
// after
const dataProvider = testDataProvider({
updateMany: async () => ({ data: [] }),
}); Defensive patterns
Strategy: validation
Validate before calling
if (dataProvider.updateMany === defaultTestDataProvider.updateMany) {
throw new Error('updateMany must be overridden when testing bulk actions');
} Type guard
const canUpdateMany = (dp: DataProvider): boolean => typeof dp.updateMany === 'function' && dp.updateMany !== defaultTestDataProvider.updateMany;
Try / catch
try {
await dataProvider.updateMany('posts', { ids: [1, 2], data: { published: true } });
} catch (e) {
if (/updateMany not implemented/.test(e.message)) {
console.warn('Override updateMany in testDataProvider');
}
throw e;
} Prevention
- Disable bulkActionButtons in tests that don't cover bulk operations
- Pre-mock updateMany returning { data: ids } in shared test setup
- Assert mock call args to catch accidental bulk updates
When it happens
Trigger: Calling dataProvider.updateMany (or useUpdateMany / bulk selection actions in a List) with the default testDataProvider and no updateMany override.
Common situations: Testing bulk-select delete/update actions in a ListView; the Datagrid bulk action buttons call updateMany against the unmocked default.
Related errors
- getOne is not implemented
- update not implemented
- create is not implemented
- delete not implemented
- deleteMany is not implemented
AI-assisted analysis of marmelab/react-admin@051f511bb0 (2026-08-30).
Data as JSON: /api/errors/cf0bea29c0bbba05.
Report an issue: GitHub.