marmelab/react-admin · error · Error
update not implemented
Error message
update not implemented
What it means
The default testDataProvider's update method intentionally throws because no default update behavior is provided. Tests must supply their own update implementation via overrides.
Source
Thrown at packages/ra-core/src/dataProvider/testDataProvider.ts:35
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');
},
updateMany: async () => {
throw new Error('updateMany not implemented');
},
};
export const testDataProvider = (
overrides?: Partial<DataProvider>
): DataProvider => ({
...defaultTestDataProvider,
...overrides,
});
View on GitHub (pinned to 051f511bb0)
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
Example fix
// before
const dataProvider = testDataProvider();
// after
const dataProvider = testDataProvider({
update: async (_resource, params) => ({ data: params.data as any }),
}); Defensive patterns
Strategy: validation
Validate before calling
if (typeof dataProvider.update !== 'function' || testDataProvider().update === dataProvider.update) {
throw new Error('update must be mocked before testing edit flows');
} Type guard
const canUpdate = (dp: DataProvider): boolean => dp.update !== defaultTestDataProvider.update;
Try / catch
try {
await dataProvider.update('posts', { id: 1, data: { title: 'x' }, previousData: {} });
} catch (e) {
if (/update not implemented/.test(e.message)) {
console.warn('Provide testDataProvider({ update: ... }) in this test');
}
throw e;
} Prevention
- 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
When it happens
Trigger: Calling dataProvider.update (directly or via useUpdate/Edit views) on the default testDataProvider without an update override.
Common situations: Testing record editing flows (useUpdate, Edit page save) with the default testDataProvider and forgetting to mock update.
Related errors
- getOne is not implemented
- updateMany not implemented
- create is not implemented
- delete not implemented
- deleteMany is not implemented
AI-assisted analysis of marmelab/react-admin@051f511bb0 (2026-08-30).
Data as JSON: /api/errors/b8d4a0a5afe33f07.
Report an issue: GitHub.