{"record":{"id":"75a7a374b8e9cd0a","repo":"marmelab/react-admin","slug":"create-is-not-implemented","errorCode":null,"errorMessage":"create is not implemented","messagePattern":"create is not implemented","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/dataProvider/testDataProvider.ts","lineNumber":14,"sourceCode":"import { DataProvider } from '../types';\n\n/**\n * A dataProvider meant to be used in tests only. You can override any of its methods by passing a partial dataProvider.\n *\n * @example\n * const dataProvider = testDataProvider({\n *    getOne: async () => ({ data: { id: 123, title: 'foo' }})\n * })\n */\n\nconst defaultTestDataProvider: DataProvider = {\n    create: async () => {\n        throw new Error('create is not implemented');\n    },\n    delete: async () => {\n        throw new Error('delete not implemented');\n    },\n    deleteMany: async () => {\n        throw new Error('deleteMany is not implemented');\n    },\n    getList: async () => {\n        throw new Error('getList is not implemented');\n    },\n    getMany: async () => {\n        throw new Error('getMany is not implemented');\n    },\n    getManyReference: async () => {\n        throw new Error('getManyReference is not implemented');\n    },\n    getOne: async () => {\n        throw new Error('getOne is not implemented');","sourceCodeStart":1,"sourceCodeEnd":32,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/dataProvider/testDataProvider.ts#L1-L32","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nconst dataProvider = testDataProvider();\n// after\nconst dataProvider = testDataProvider({\n  create: async () => ({ data: { id: 123, title: 'foo' } }),\n});","handlingStrategy":"try-catch","validationCode":"if (!dataProviderOverrides.create) throw new Error('test must stub create');","typeGuard":null,"tryCatchPattern":"try { await create(); } catch (e) { if (String(e.message).includes('not implemented')) { /* forgot to stub create */ } throw e; }","preventionTips":["Stub every dataProvider method your test exercises","Prefer mockProvider for automatic defaults","Keep a shared testDataProvider factory with common stubs"],"tags":["react-admin","testing","data-provider"],"backgroundTag":"unimplemented-method","analyzedSha":"051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0","analyzedAt":"2026-08-30T02:28:14.926Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}