marmelab/react-admin · error · Error
deleteMany is not implemented
Error message
deleteMany is not implemented
What it means
Like all testDataProvider defaults, deleteMany throws unless explicitly overridden. It fails the test immediately rather than returning fake data, so tests only pass when they define the behavior they depend on.
Source
Thrown at packages/ra-core/src/dataProvider/testDataProvider.ts:20
/**
* A dataProvider meant to be used in tests only. You can override any of its methods by passing a partial dataProvider.
*
* @example
* const dataProvider = testDataProvider({
* getOne: async () => ({ data: { id: 123, title: 'foo' }})
* })
*/
const defaultTestDataProvider: DataProvider = {
create: async () => {
throw new Error('create is not implemented');
},
delete: async () => {
throw new Error('delete not implemented');
},
deleteMany: async () => {
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');View on GitHub (pinned to 051f511bb0)
Solutions
- Stub deleteMany: testDataProvider({ deleteMany: async () => ({ data: [123, 456] }) })
- Switch to mockProvider which returns sensible defaults for all methods
- Assert only on single-record delete paths if bulk behavior isn't the target
Example fix
// before
const dataProvider = testDataProvider();
// after
const dataProvider = testDataProvider({
deleteMany: async () => ({ data: [1, 2, 3] }),
}); Defensive patterns
Strategy: try-catch
Validate before calling
if (!dataProviderOverrides.deleteMany) throw new Error('test must stub deleteMany'); Try / catch
try { await dataProvider.deleteMany(r, { ids }); } catch (e) { /* stub deleteMany */ throw e; } Prevention
- Stub bulk methods alongside single ones
- Use mockProvider for bulk delete tests
- Audit components under test for bulk actions
When it happens
Trigger: A test path that calls dataProvider.deleteMany (useDeleteMany, BulkDeleteButton, bulk selection delete) against testDataProvider() with no deleteMany override.
Common situations: Testing a datagrid's bulk delete toolbar; batch cleanup logic in unit tests; forgetting bulk methods while stubbing single delete only.
Related errors
- create is not implemented
- delete not implemented
- getList is not implemented
- getMany is not implemented
- getManyReference is not implemented
AI-assisted analysis of marmelab/react-admin@051f511bb0 (2026-08-30).
Data as JSON: /api/errors/23ee3b9b8d2b74c0.
Report an issue: GitHub.