reactjs - 您在查询中使用片段,没有添加类型名
问题描述
这是我正在测试的组件的测试文件。它给出片段警告并且不工作。我将相同的代码用于我的查询未使用的另一个组件fragment
并且它有效。我不知道如何测试查询正在使用的组件fragment
。我现在觉得好傻。这是我第三次尝试测试。
__Typename
是假的,我已经检查了其他答案。他们都没有帮助我。
React-Apollo
测试非常困难:/
import React from 'react';
import {
wait,
cleanup,
waitForElement,
fireEvent
} from '@testing-library/react';
import { Route } from 'react-router';
import { customRender } from '../../test-utils/customRender';
import { CategoriesListContainer } from './list/Container';
import { getAllCategoriesQuery } from '../../queries/GET_ALL_CATEGORIES';
import { reorderCategoriesMutation } from '../../queries/REORDER_CATEGORIES';
afterEach(() => {
cleanup();
// @ts-ignore
console.error.mockClear();
});
console.error = jest.fn();
const getAllCategoriesMock = {
request: {
query: getAllCategoriesQuery
},
result: {
data: {
getAllCategories: [
{
id: 1,
name: 'categoryName',
thumbnail: undefined,
position: 1,
active: false,
created_at: 1,
updated_at: 1,
__typename: 'Category'
}
]
}
}
};
const reorderCategoriesMock = {
request: {
query: reorderCategoriesMutation,
variables: {
category_ids: [1, 2]
}
},
result: {
data: {
reorderCategories: true
}
}
};
describe('Category module testing', () => {
test('Category List', async () => {
const { container, getByText, findByText, debug } = customRender(
<Route path="/">
<CategoriesListContainer />
</Route>,
[getAllCategoriesMock, reorderCategoriesMock]
);
const tagName = await waitForElement(() => getByText(`categoryName`));
const createdAt = await waitForElement(() =>
getByText(`01/01/1970 05:30:00`)
);
expect(createdAt).toBeDefined();
expect(container).toMatchSnapshot();
expect(tagName).toBeDefined();
});
});
这是我的自定义渲染:
import * as React from 'react';
import { render, cleanup } from '@testing-library/react';
import { MockedProvider, MockedResponse } from '@apollo/react-testing';
import { Router, Switch } from 'react-router-dom';
import { createMemoryHistory } from 'history';
afterEach(cleanup);
export const customRender = (
node: JSX.Element | null,
mocks?: MockedResponse[],
{
//@ts-ignore
route = '/',
history = createMemoryHistory({ initialEntries: [route] })
} = {}
) => {
return {
history,
...render(
<MockedProvider mocks={mocks} addTypename={false}>
<Router history={history}>
<Switch>{node}</Switch>
</Router>
</MockedProvider>
)
};
};
解决方案
推荐阅读
- c# - 超时已过。在“lock:recurring-job:l”资源上获得分布式锁之前超时已过
- javascript - 如何将数组中的值推送到行中?
- javascript - Discord bot:命令名称的命令处理程序别名
- android - android studio中的DownloadManager无法下载pdf,显示无法下载项目
- pca - 如何在 UMAP 中选择正确的维数?
- c++ - 如果我在堆上声明一个类实例,它的所有成员也会在堆上吗?
- flutter - 如何在颤动中将焦点设置在材质按钮上
- flask - ModuleNotFoundError:没有名为“apsheduler”的模块
- azure-notificationhub - Azure 通知中心上单个消息遥测的生存时间是多少?
- javascript - 将多个 id 附加到 api 调用