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方法来断言查询结果的正确性。通过编写测试,我们可以保证我们的应用程序可以正常工作,并且我们可以不断改进和优化我们的应用程序。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/64c9b8ea5ad90b6d0417ecaa