【发布时间】:2021-10-08 07:05:35
【问题描述】:
我为 Apollo 客户端设置了以下 ErrorLink。
export const errorLink = onError(
({ response, graphQLErrors, networkError, operation }: ErrorResponse) => {
notificationService.notify("An Error Occurred");
},
);
我需要在单元测试中测试这个实现。 我有以下测试 Apollo Links
const MockQuery = gql`
query {
foo
}
`;
interface LinkResult<T> {
operation: Operation;
result: FetchResult<T>;
}
async function executeLink<T = ApolloLink>(
linkToTest: ApolloLink,
request: GraphQLRequest = { query: MockQuery },
) {
const linkResult = {} as LinkResult<T>;
return new Promise<LinkResult<T>>((resolve, reject) => {
execute(ApolloLink.from([linkToTest]), request).subscribe(
(result) => {
linkResult.result = result as FetchResult<T>;
},
(error) => {
reject(error);
},
() => {
resolve(linkResult);
},
);
});
}
it('triggers a notification on error', () => {
const testLink = new ApolloLink(() => {
await waitFor(() => expect(notificationSpy).toBeCalledWith('An Error Occurred'))
return null;
});
const link = ApolloLink.from([errorLink, testLink]);
executeLink(link);
});
这些单元测试适用于其他链接,如 AuthLink,我在其中测试身份验证令牌是否设置为 localStorage。但是我无法测试错误链接,因为我无法触发 GraphQL 错误。
【问题讨论】:
标签: reactjs unit-testing graphql apollo apollo-client