2.8 KiB
title | description |
---|---|
Integration testing | Utilities for testing Apollo Server |
Testing apollo-server
can be done in many ways. The apollo-server-testing
package provides tooling to make testing easier and accessible to users of all of the apollo-server
integrations.
createTestClient
Integration testing a GraphQL server means testing many things. apollo-server
has a request pipeline that can support many plugins that can affect the way an operation is executed. createTestClient
provides a single hook to run operations through the request pipeline, enabling the most thorough tests possible without starting up an HTTP server.
const { createTestClient } = require('apollo-server-testing');
const { query, mutate } = createTestClient(server);
query({
query: GET_USER,
variables: { id: 1 }
});
mutate({
mutation: UPDATE_USER,
variables: { id: 1, email: 'nancy@foo.co' }
});
When passed an instance of the ApolloServer
class, createTestClient
returns a query
and mutate
function that can be used to run operations against the server instance. Currently, queries and mutations are the only operation types supported by createTestClient
.
const { createTestClient } = require('apollo-server-testing');
it('fetches single launch', async () => {
const userAPI = new UserAPI({ store });
const launchAPI = new LaunchAPI();
// create a test server to test against, using our production typeDefs,
// resolvers, and dataSources.
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => ({ userAPI, launchAPI }),
context: () => ({ user: { id: 1, email: 'a@a.a' } }),
});
// mock the dataSource's underlying fetch methods
launchAPI.get = jest.fn(() => [mockLaunchResponse]);
userAPI.store = mockStore;
userAPI.store.trips.findAll.mockReturnValueOnce([
{ dataValues: { launchId: 1 } },
]);
// use the test server to create a query function
const { query } = createTestClient(server);
// run query against the server and snapshot the output
const res = await query({ query: GET_LAUNCH, variables: { id: 1 } });
expect(res).toMatchSnapshot();
});
This is an example of a full integration test being run against a test instance of apollo-server
. This test imports the important pieces to test (typeDefs
, resolvers
, dataSources
) and creates a new instance of apollo-server
. Once an instance is created, it's passed to createTestClient
which returns { query, mutate }
. These methods can then be used to execute operations against the server.
For more examples of this tool in action, check out the integration tests in the Fullstack Tutorial.