graphql - 我怎样才能 spyOn `useMutation` 以便我可以看到传递的值是什么?
问题描述
我不想创建大规模的 E2E 测试,而是想验证useMutation
从组件接收到的内容。在我的组件“发布”之前有很多业务逻辑,我想测试 GraphQL 变异函数是否正在接收数据的形状。
在这种情况下,手动模拟查询不会提供价值,因为它会跳过我想要跟踪的业务逻辑。现在让查询返回完整的数据和响应没有任何价值,因为我的组件将卸载并且 URL 将在成功返回数据后更改。
useMutation
所以理想情况下,我们只是在调用钩子时停止测试。
我希望做类似的事情:
const mutationSpy = jest.spyOn(graphQL, 'useMutation');
...
expect(mutationSpy).toHaveBeenCalledWith(myDataShape);
解决方案
跟踪是否已调用突变的最佳方法是使用@apollo/react-testing
(react-native) 或@apollo/client
(react) 的 MockedProvider 为您的模拟响应提供回调函数,该函数更改测试范围内的变量,以便可以检查一次测试已运行。像这样的东西。
这是文档:
https://www.apollographql.com/docs/react/development-testing/testing/#testing-mutation-components
测试.js
let createMutationCalled = false
const mocks = [
{
request,
result: () => {
createMutationCalled = true
return { data }
}
}
];
describe('test', () => {
test('should call createTicket mutation', async () => {
const { getByTestId } = render(
<MockedProvider mocks={mocks}>
<SelfReportPage />
</MockedProvider>
)
let input = getByTestId('sr-description')
let submit = getByTestId('sr-submit')
fireEvent.changeText(input, 'Test text.')
fireEvent.press(submit)
await new Promise(r => setTimeout(r, 0));
expect(createMutationCalled).toBe(true)
})
})
推荐阅读
- authentication - cakephp 4 - 烘焙新控制器时找不到身份验证组件
- r - 可分配性图 - 绘制属于三个组的概率
- python - 从字典中提取相应键的值
- node.js - Feathers.js Docker
- android - 颤动中带有英雄和showDialog的动画
- java - 如何在 Spring Boot 调试中找到错误?
- multithreading - 进入 Windows 关键部分是原子操作吗?
- google-apps-script - 我需要根据列值将 Google 表格拆分为多个选项卡(表格)
- asp.net - 将 ASP Net 中的条形图从进度条更改为轴中的点
- javascript - 'Redux' 没有定义......以及 ReactRedux 和 ReactDOM