0

当我们使用模拟服务工作者 (MSW) 模拟 graphql 查询时,我们想要断言传递给查询的变量具有特定值。这超出了打字稿类型的类型验证。我们正在用 MSW 开玩笑。您是否监视 MSW 以做出这些断言?还是有另一种方法可以期望req.variables具有一定的价值。

graphql.query<SaveContent, SaveContentVariables>('SaveContent', (req, res, ctx) => {
    return res(
      ctx.data({
        saveContent: {
          success: true,
          id: req.variables.id,
          errors: [],
        },
      })
    );
  })
4

1 回答 1

0

Mock Service Worker 建议将您的请求断言基于 UI(在请求断言配方中阅读更多信息)。在大多数情况下,如果您的请求/响应数据是正确的,那么您的 UI 在测试中就是正确的。相反的情况也是如此。尽可能断言数据驱动的 UI。

在您的情况下,您希望在请求中断言查询变量。考虑根据那些后来产生相应 UI 的变量返回数据。

当您发现绝对有必要在 UI 之外执行直接请求/响应断言时,请使用允许执行任意逻辑以响应各种 MSW 事件的生命周期事件。例如,这是您可以在测试中断言请求变量的方式:

const server = setupServer(...handlers)

it('saves the content', async () => {
  expect.assertions(1)

  server.on('request:match', (req) => {
    expect(req.variables).toEqual({ id: 'abc-123' })
  })

  await performQuery(...)
})
于 2021-04-13T00:21:10.437 回答