Apollo是一个开源的GraphQL客户端,它提供了一种简单且强大的方式来管理GraphQL查询和状态。在Jasmine/Karma测试中使用mockError时出现Angular抛出错误的问题,可能是由于未正确处理错误导致的。
解决这个问题的方法是使用Apollo提供的mockError
函数来模拟错误,并在测试中捕获和处理该错误。以下是一种可能的解决方案:
npm install apollo-client graphql graphql-tag --save-dev
import { ApolloClient, ApolloLink, HttpLink, InMemoryCache } from 'apollo-client';
import { onError } from 'apollo-link-error';
import { ApolloProvider } from 'react-apollo';
import { mockNetworkInterfaceWithSchema } from 'apollo-test-utils';
import { makeExecutableSchema } from 'graphql-tools';
const schema = makeExecutableSchema({ typeDefs });
const networkInterface = mockNetworkInterfaceWithSchema({ schema });
networkInterface.use([{
applyMiddleware(req, next) {
if (req.query.includes('mockError')) {
next(new Error('Mock error message'));
} else {
next();
}
},
}]);
const client = new ApolloClient({
link: ApolloLink.from([
onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors) {
graphQLErrors.forEach(({ message, locations, path }) => {
console.log(`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`);
});
}
if (networkError) {
console.log(`[Network error]: ${networkError}`);
}
}),
new HttpLink({ uri: 'http://your-graphql-endpoint' }),
]),
cache: new InMemoryCache(),
});
mockError
来触发错误并进行断言:it('should handle error', async () => {
const query = gql`
query {
someQuery {
id
}
}
`;
const { result, error } = await client.query({ query });
expect(error).toBeDefined();
expect(error.message).toBe('Mock error message');
});
这样,你就可以在Jasmine/Karma测试中使用mockError
来模拟错误,并对错误进行处理和断言了。
关于Apollo的更多信息和使用方法,你可以参考腾讯云的Apollo产品介绍页面:Apollo产品介绍。
领取专属 10元无门槛券
手把手带您无忧上云