4

Apollo GraphQL 的 Mocking 示例具有以下代码(见下文)。

有趣的是最后一行 - 他们创建并执行graphql查询。但是你通常需要创建 ApolloClient 对象。我不知道该怎么做。

ApolloClient 期望 NetworkingInterface 作为参数而不是可执行模式。

那么,有没有一种方法可以在没有 NetworkingInterface 的情况下从可执行模式创建 ApolloClient?

import { makeExecutableSchema, addMockFunctionsToSchema } from 'graphql-tools';
import { graphql } from 'graphql';

// Fill this in with the schema string
const schemaString = `...`;

// Make a GraphQL schema with no resolvers
const schema = makeExecutableSchema({ typeDefs: schemaString });

// Add mocks, modifies schema in place
addMockFunctionsToSchema({ schema });

const query = `
query tasksForUser {
  user(id: 6) { id, name }
}
`;

graphql(schema, query).then((result) => console.log('Got result', result));
4

2 回答 2

8

以下内容摘自GitHub 上基于我们的博客文章编写的文档 PRmagbicaleman

您可以使用 轻松做到这一点apollo-test-utils,如下所示:

import { makeExecutableSchema, addMockFunctionsToSchema } from 'graphql-tools';
import { mockNetworkInterfaceWithSchema } from 'apollo-test-utils';
import { typeDefs } from './schema';

// Create GraphQL schema object
const schema = makeExecutableSchema({ typeDefs });

// Add mocks
addMockFunctionsToSchema({ schema });

// Create network interface
const mockNetworkInterface = mockNetworkInterfaceWithSchema({ schema });

// Initialize client
const client = new ApolloClient({
  networkInterface: mockNetworkInterface,
});

现在您可以正常使用客户端实例了!

于 2017-04-06T04:48:27.303 回答
6

在 Apollo 客户端 v2 中,networkInterface已替换为网络层(请参阅此处link的客户端文档)。

apollo-test-utilsApollo 客户端 v2 尚未更新,根据来自 github 的对话,目前的建议似乎是使用apollo-link-schema

import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { SchemaLink } from 'apollo-link-schema';
import { makeExecutableSchema, addMockFunctionsToSchema } from 'graphql-tools';
import { typeDefs } from './schema';

const schema = makeExecutableSchema({ typeDefs });
addMockFunctionsToSchema({ schema });

const graphqlClient = new ApolloClient({
  cache: new InMemoryCache(),
  link: new SchemaLink({ schema })
});

然后你只需要将客户端注入到你正在测试的任何东西中!

于 2017-12-21T07:04:12.870 回答