私は React で GraphQL を使用するのが初めてで、プロジェクトを REST API から新しい GraphQL に移行しています。その一環として、完成した GQL API とは関係なく、アプリケーションで動作するようにモック データをセットアップしたいと考えました。私は Apollo とGraphQL Tools のドキュメントに従おうと多くの時間を費やしましたが、何があっても、モック リゾルバーを適切に動作させることができないようです。コンテキストとして、私はこれを NextJS/React アプリで使用しています。ここに、私がやろうとしていることの最小限の例を示します。
App.js のセットアップ
import React from 'react';
import ApolloClient from 'apollo-client';
import { ApolloProvider } from 'react-apollo';
import { SchemaLink } from 'apollo-link-schema';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { makeExecutableSchema } from '@graphql-tools/schema';
import { addMocksToSchema } from '@graphql-tools/mock';
export default function App() {
const schema = makeExecutableSchema({typeDefs:`
type Query {
getPerson: Person!
}
type Person {
name: String!
}
`});
const mocks = {
Query: () => ({
getPerson: () => ({
name: () => "Name"
})
})
}
addMocksToSchema({ mocks, schema });
const link = new SchemaLink({ schema });
const client = new ApolloClient({
link,
cache: new InMemoryCache(),
connectToDevTools: true
});
return (
<ApolloProvider client={client}>
<Person />
</ApolloProvider>
)
}
Person.js
import React from 'react';
import { useQuery } from '@apollo/react-hooks';
import gql from 'graphql-tag';
export default function Person() {
const { loading, error, data } = useQuery(gql`
query PersonQuery {
getPerson {
name
}
}
`, {
errorPolicy: 'all'
});
console.log(data);
if (loading) return "Loading...";
if (error) console.log(error);
return (
<h1>{data.getPerson.name}<h1>
)
}
console.log(error) の結果を見ると、エラーが発生Cannot return null for non-nullable field Query.getPerson
し、それを null 許容フィールドにすると{ getPerson: null }
、もちろん返されます。リゾルバーの結果をオブジェクトと関数として返そうとしました。リゾルバー内のログは、クエリ部分が実行されていることを示していますが、その中に何もネストされていません。
何かを間違って設定していますか?また、graphql-tools ドキュメントに基づいて可能であると提案されているように、カスタム モックを渡さないようにしましたが、役に立ちませんでした。また、フックの最新バージョンが addMocksToSchema の使用法を壊したという apollo hooks GitHub からこの問題を見たので、提案された 3.1.3 バージョンを使用してみましたが、やはりうまくいきませんでした。どんな助けでも大歓迎です!