marmelab/react-admin · error · Error

delete not implemented

Error message

delete not implemented

What it means

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.

Source

Thrown at packages/ra-core/src/dataProvider/testDataProvider.ts:17

import { DataProvider } from '../types';

/**
 * A dataProvider meant to be used in tests only. You can override any of its methods by passing a partial dataProvider.
 *
 * @example
 * const dataProvider = testDataProvider({
 *    getOne: async () => ({ data: { id: 123, title: 'foo' }})
 * })
 */

const defaultTestDataProvider: DataProvider = {
    create: async () => {
        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');

View on GitHub (pinned to 051f511bb0)

Solutions

  1. Stub delete: testDataProvider({ delete: async () => ({ data: previousRecord }) })
  2. Use the auto-mocking mockProvider helper instead of the throwing testDataProvider
  3. Restructure the test so no delete is triggered, or use queryClient / network-level mocks

Example fix

// before
const dataProvider = testDataProvider();
// after
const dataProvider = testDataProvider({
  delete: async () => ({ data: { id: 123, title: 'foo' } }),
});
Defensive patterns

Strategy: try-catch

Validate before calling

if (!dataProviderOverrides.delete) throw new Error('test must stub delete');

Try / catch

try { await dataProvider.delete(r, { id }); } catch (e) { /* 'delete not implemented' => add a delete stub */ throw e; }

Prevention

When it happens

Trigger: Triggering record deletion (useDelete, DeleteButton click, <Delete> view) in a test using testDataProvider() without overriding delete.

Common situations: Clicking DeleteButton in a react-testing-library test; a Delete toolbar action firing on submit; reusing read-only test fixtures for mutation tests.

Related errors


AI-assisted analysis of marmelab/react-admin@051f511bb0 (2026-08-30). Data as JSON: /api/errors/515d75d8596441c1. Report an issue: GitHub.