GraphQL 是一种查询语言,它可以让前端应用程序更有效地与后端服务进行通信,从而提高整个应用程序的性能。但是,由于 GraphQL 的复杂性和灵活性,它的测试也变得非常困难。在这篇文章中,我们将探讨如何使用 Jest 测试一个 GraphQL 应用程序,以及如何通过测试来改进我们的应用程序。
准备工作
在开始测试之前,我们需要准备一些工作。
首先,我们需要确保我们的应用程序已经被写入 GraphQL,并且我们可以查询数据库并返回数据。我们还需要安装一些 npm 包,包括graphql
, apollo-server
, apollo-server-testing
, 和 jest
。
安装这些包后,我们需要创建一个 GraphQL schema,这可以通过使用makeExecutableSchema
方法来实现,该方法来自graphql-tools
包。在这个 schema 中,我们可以定义我们的查询,类型和解析器。我们需要将这个 schema 传递给 Apollo 服务器,以便将其用于处理我们的查询。
现在,我们已经准备好开始测试了。
使用 Jest 测试 GraphQL 应用程序
使用 Jest 测试 GraphQL 应用程序主要涉及以下三个步骤:
- 定义查询
- 创建测试数据
- 执行查询
定义查询
在我们开始编写测试之前,我们需要知道我们要测试的是什么。我们需要定义一个查询,然后对该查询进行测试。
例如,下面是一个查询,它查询所有用户的姓名:
const GET_USERS = gql` query getUsers { users { name } } `;
创建测试数据
在执行查询之前,我们需要为我们的测试创建一些数据。我们可以使用ApolloServerTestClient
来模拟我们的应用程序,然后使用 Jest 来测试它。我们还需要模拟一些数据库,以便我们可以测试我们的查询。
例如,下面是一个测试,它创建了一个模拟用户对象并在数据库中查询他们的名称:
-- -------------------- ---- ------- ------ - ---------------------- - ---- ------------------------ ------ - -------------------- - ---- ---------------- ------ - ------------ - ---- ---------------- ------ - ------- - ---- ------------ ------ --------- ---- -------------- ----- ------ - ---------------------- --------- -------- ---------- --- -------------------- -- -- - --- ------- ----------------------- ------------ -- - ----- ------ - --- -------------- ------ --- ------ - ----------------------- -- ----- --- ----------- ----- -- ------- ----- -- -- - ----- - ----- ------ - - ----- -------------- ------ --------- --- --------------------------------------- ---------------------------------------- -- --- ---
这个测试使用ApolloServerTestClient
来创建一个测试客户端,然后使用ApolloServer
来启动我们的应用程序。然后,我们将执行查询并校验查询结果的正确性。
执行查询
现在我们已经定义了查询和创建了测试数据,我们需要执行查询并校验返回的结果。我们可以使用client.query
方法来执行查询,并使用 Jest 中的expect
方法来断言查询结果的正确性。
例如,下面是一个测试,它使用 Jest 断言查询结果正确性:
it('returns names of users', async () => { const { data, errors } = await client.query({ query: GET_USERS }); expect(data.users.name).toContainEqual( expect.stringMatching(/^[A-Za-z]{1,}$/), ); });
在这个测试中,我们使用 Jest 断言data.users.name
返回了一个字符串,这个字符串满足正则表达式/^[A-Za-z]{1,}$/
,可以用来校验用户名称的格式。
总结
在这篇文章中,我们探讨了如何使用 Jest 测试一个 GraphQL 应用程序。我们可以使用ApolloServerTestClient
来模拟应用程序,并使用 Jest 中的expect
方法来断言查询结果的正确性。通过编写测试,我们可以保证我们的应用程序可以正常工作,并且我们可以不断改进和优化我们的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9b8ea5ad90b6d0417ecaa