2017-04-06 11 views
3

Apollo GraphQLのMockingの例には、次のコードがあります(下記参照)。mocked実行可能スキーマをApollo Clientに渡すには?

興味深いのは最後の行です。彼らは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)); 
+0

まだ私がマージする必要があるドキュメントには公開されているPRがあります:https://github.com/apollographql/react-docs/pull/172 – stubailo

答えて

8

次は私たちのblog postに基づいて、GitHubの上magbicalemanによって書かれたdocs PRから持ち上げられる:

あなたは簡単にそうように、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, 
}); 

今、あなたは通常のようにクライアントインスタンスを使用できます。

+0

ありがとう、このような単純なユースケースではあまりに複雑すぎます。 .. –

+0

理想的には、 'new ApolloClient({schema:executableSchema}) 'のようなものでなければなりません。 –

+2

私たちはコード行を最適化しようとしていません。この場合、1つのことをうまくやっているプロセスの各部分について、特定の方法があります。あなたが望むなら、この1行を作るヘルパー関数を簡単に書くことができます! – stubailo

3

アポロクライアントv2では、networkInterfaceがネットワークレイヤのlinkに置き換えられました(クライアントのドキュメントhereを参照)。

apollo-test-utilsはアポロクライアントv2の更新、およびgithubのからconversationsをもとにしていない、現在の勧告は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 }) 
}); 

次に、あなただけのものは何でもあなたにクライアントを注入する必要があります再テスト!

関連する問題