marmelab/react-admin · error · Error
delete not implemented
Error message
delete not implemented
What it means
testDataProvider's default delete implementation always throws to make tests fail fast when they rely on un-stubbed data provider behavior. Seeing this error means your test exercised delete without providing an implementation.
Source
Thrown at packages/ra-core/src/dataProvider/testDataProvider.ts:17
import { DataProvider } from '../types';
/**
* 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');View on GitHub (pinned to 051f511bb0)
Solutions
- Stub delete: testDataProvider({ delete: async () => ({ data: previousRecord }) })
- Use the auto-mocking mockProvider helper instead of the throwing testDataProvider
- Restructure the test so no delete is triggered, or use queryClient / network-level mocks
Example fix
// before
const dataProvider = testDataProvider();
// after
const dataProvider = testDataProvider({
delete: async () => ({ data: { id: 123, title: 'foo' } }),
}); Defensive patterns
Strategy: try-catch
Validate before calling
if (!dataProviderOverrides.delete) throw new Error('test must stub delete'); Try / catch
try { await dataProvider.delete(r, { id }); } catch (e) { /* 'delete not implemented' => add a delete stub */ throw e; } Prevention
- Stub delete in any test clicking DeleteButton
- Use mockProvider when full CRUD defaults are convenient
- Review test failures mentioning 'not implemented' as stub gaps
When it happens
Trigger: Triggering record deletion (useDelete, DeleteButton click, <Delete> view) in a test using testDataProvider() without overriding delete.
Common situations: Clicking DeleteButton in a react-testing-library test; a Delete toolbar action firing on submit; reusing read-only test fixtures for mutation tests.
Related errors
- create is not implemented
- deleteMany is 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/515d75d8596441c1.
Report an issue: GitHub.