marmelab/react-admin · error · Error
getOne is not implemented
Error message
getOne is not implemented
What it means
testDataProvider.ts defines a default DataProvider whose methods all throw 'not implemented' errors. This guards against tests accidentally relying on unimplemented data provider methods instead of mocking them via overrides.
Source
Thrown at packages/ra-core/src/dataProvider/testDataProvider.ts:32
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');
},
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 a getOne override: testDataProvider({ getOne: async () => ({ data: { id: 1 } }) })
- Avoid mounting components that call getOne, or mock the query so it never fires
- Use a full mock data provider instead of the default testDataProvider
Example fix
// before
const dataProvider = testDataProvider();
// after
const dataProvider = testDataProvider({
getOne: async () => ({ data: { id: 1, title: 'Hello' } }),
}); Defensive patterns
Strategy: validation
Validate before calling
const dp = testDataProvider();
if (dp.getOne === defaultTestDataProvider.getOne) {
throw new Error('testDataProvider.getOne must be overridden for this test');
} Type guard
const hasGetOne = (dp: Partial<DataProvider>): dp is Partial<DataProvider> & Required<Pick<DataProvider, 'getOne'>> => typeof dp.getOne === 'function';
Try / catch
try {
await dataProvider.getOne('posts', { id: 1 });
} catch (e) {
if (e.message.includes('not implemented')) {
// override missing in this test — fix the mock, not the test
}
throw e;
} Prevention
- Always pass overrides for every dataProvider method your component calls
- Render test components inside the minimal Resource context they need
- Grep tests for testDataProvider() with no arguments
When it happens
Trigger: Calling getOne on the default testDataProvider (or the provider returned by testDataProvider()) without passing a getOne override in the overrides object.
Common situations: Unit tests rendering react-admin components that fetch a single record (e.g. Edit, Show, useGetOne) while using testDataProvider without overriding getOne.
Related errors
- update 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/52436eb64d19a165.
Report an issue: GitHub.