{"record":{"id":"515d75d8596441c1","repo":"marmelab/react-admin","slug":"delete-not-implemented","errorCode":null,"errorMessage":"delete not implemented","messagePattern":"delete not implemented","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/dataProvider/testDataProvider.ts","lineNumber":17,"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');\n    },\n    update: async () => {\n        throw new Error('update not implemented');","sourceCodeStart":1,"sourceCodeEnd":35,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/dataProvider/testDataProvider.ts#L1-L35","documentation":"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.","triggerScenarios":"Triggering record deletion (useDelete, DeleteButton click, <Delete> view) in a test using testDataProvider() without overriding delete.","commonSituations":"Clicking DeleteButton in a react-testing-library test; a Delete toolbar action firing on submit; reusing read-only test fixtures for mutation tests.","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"],"exampleFix":"// before\nconst dataProvider = testDataProvider();\n// after\nconst dataProvider = testDataProvider({\n  delete: async () => ({ data: { id: 123, title: 'foo' } }),\n});","handlingStrategy":"try-catch","validationCode":"if (!dataProviderOverrides.delete) throw new Error('test must stub delete');","typeGuard":null,"tryCatchPattern":"try { await dataProvider.delete(r, { id }); } catch (e) { /* 'delete not implemented' => add a delete stub */ throw e; }","preventionTips":["Stub delete in any test clicking DeleteButton","Use mockProvider when full CRUD defaults are convenient","Review test failures mentioning 'not implemented' as stub gaps"],"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"}