marmelab/react-admin · error · Error
create is not implemented
Error message
create is not implemented
What it means
testDataProvider builds a DataProvider where every method throws by default, so tests must stub only the methods they need. Calling create without stubbing it hits the default throwing implementation — this is an intentional guard telling you the test didn't provide the behavior it exercised.
Source
Thrown at packages/ra-core/src/dataProvider/testDataProvider.ts:14
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');View on GitHub (pinned to 051f511bb0)
Solutions
- Stub create in the test data provider: testDataProvider({ create: async () => ({ data: { id: 1 } }) })
- Switch the test to mockProvider (from ra-test or react-admin test utils) which implements create automatically
- If the test should not create anything, assert on the failure path or avoid triggering the mutation
Example fix
// before
const dataProvider = testDataProvider();
// after
const dataProvider = testDataProvider({
create: async () => ({ data: { id: 123, title: 'foo' } }),
}); Defensive patterns
Strategy: try-catch
Validate before calling
if (!dataProviderOverrides.create) throw new Error('test must stub create'); Try / catch
try { await create(); } catch (e) { if (String(e.message).includes('not implemented')) { /* forgot to stub create */ } throw e; } Prevention
- Stub every dataProvider method your test exercises
- Prefer mockProvider for automatic defaults
- Keep a shared testDataProvider factory with common stubs
When it happens
Trigger: Using useCreate / dataProvider.create() (or a <Create> view) in a test with a provider from testDataProvider() without passing a create implementation in the overrides object.
Common situations: Snapshot/RTL tests mounting a Create form against the default testDataProvider; forgetting that testDataProvider fails fast for unstubbed methods; copy-pasting a test setup from a read-only test suite.
Related errors
- delete 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/75a7a374b8e9cd0a.
Report an issue: GitHub.