npm install --save-dev jest graphql jest-graphql-mocks
mutation.test.js
的测试文件,使用jest-graphql-mocks
来模拟GraphQL请求和响应:const { createMockedClient } = require('jest-graphql-mocks');
const { myMutation } = require('../myMutation');
describe('myMutation', () => {
it('should call onSuccess callback when mutation is successful', async () => {
const client = createMockedClient();
client.setRequestHandler(myMutation, () => ({ data: { myMutation: true } }));
const onSuccessMock = jest.fn();
const onErrorMock = jest.fn();
await myMutation({ client, onSuccess: onSuccessMock, onError: onErrorMock });
expect(onSuccessMock).toHaveBeenCalledTimes(1);
expect(onErrorMock).not.toHaveBeenCalled();
});
it('should call onError callback when mutation fails', async () => {
const client = createMockedClient();
client.setRequestHandler(myMutation, () => ({ errors: [{ message: 'Something went wrong' }] }));
const onSuccessMock = jest.fn();
const onErrorMock = jest.fn();
await myMutation({ client, onSuccess: onSuccessMock, onError: onErrorMock });
expect(onSuccessMock).not.toHaveBeenCalled();
expect(onErrorMock).toHaveBeenCalledTimes(1);
});
});
myMutation.js
:const MY_MUTATION = gql`
mutation MyMutation {
# Your mutation here
}
`;
export function myMutation({ client, onSuccess, onError }) {
return client
.mutate({
mutation: MY_MUTATION
})
.then(({ data }) => {
onSuccess(data);
})
.catch(({ errors }) => {
onError(errors);
});
}
这样,我们就可以用Jest测试GraphQL Mutation的回调函数(onSuccess、onError)是否正确被调用了。