{"record":{"id":"b8d4a0a5afe33f07","repo":"marmelab/react-admin","slug":"update-not-implemented","errorCode":null,"errorMessage":"update not implemented","messagePattern":"update not implemented","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/dataProvider/testDataProvider.ts","lineNumber":35,"sourceCode":"        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');\n    },\n    updateMany: async () => {\n        throw new Error('updateMany not implemented');\n    },\n};\nexport const testDataProvider = (\n    overrides?: Partial<DataProvider>\n): DataProvider => ({\n    ...defaultTestDataProvider,\n    ...overrides,\n});\n","sourceCodeStart":17,"sourceCodeEnd":47,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/dataProvider/testDataProvider.ts#L17-L47","documentation":"The default testDataProvider's update method intentionally throws because no default update behavior is provided. Tests must supply their own update implementation via overrides.","triggerScenarios":"Calling dataProvider.update (directly or via useUpdate/Edit views) on the default testDataProvider without an update override.","commonSituations":"Testing record editing flows (useUpdate, Edit page save) with the default testDataProvider and forgetting to mock update.","solutions":["Pass an update override: testDataProvider({ update: async (resource, params) => ({ data: { ...params.data, id: params.id } }) })","Use testDataProvider's onError/success helpers or a spy (vi.fn/jest.fn) for update","Skip the mutation in the test if update behavior is out of scope"],"exampleFix":"// before\nconst dataProvider = testDataProvider();\n// after\nconst dataProvider = testDataProvider({\n  update: async (_resource, params) => ({ data: params.data as any }),\n});","handlingStrategy":"validation","validationCode":"if (typeof dataProvider.update !== 'function' || testDataProvider().update === dataProvider.update) {\n  throw new Error('update must be mocked before testing edit flows');\n}","typeGuard":"const canUpdate = (dp: DataProvider): boolean => dp.update !== defaultTestDataProvider.update;","tryCatchPattern":"try {\n  await dataProvider.update('posts', { id: 1, data: { title: 'x' }, previousData: {} });\n} catch (e) {\n  if (/update not implemented/.test(e.message)) {\n    console.warn('Provide testDataProvider({ update: ... }) in this test');\n  }\n  throw e;\n}","preventionTips":["Mock update with a vi.fn/jest.fn so assertions also verify it was called","Cover each mutation used by the screen under test in setup helpers","Share a factory that pre-mocks all methods"],"tags":["testing","data-provider","mock","react-admin"],"backgroundTag":"unimplemented-mock-method","analyzedSha":"051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0","analyzedAt":"2026-08-30T02:28:14.926Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}