Как сделать утверждения о переменных запроса graphql при использовании Mock Service Worker?

Когда мы имитируем запрос graphql с помощью mock service worker (MSW), мы хотим утверждать, что переменные, переданные в запрос, имеют определенные значения. Это выходит за рамки проверки типа с типизацией машинописного текста. Мы используем шутку с MSW. Вы следите за MSW, чтобы сделать эти утверждения? или есть другой способ ожидать req.variables иметь определенную ценность.

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

1 ответ

Mock Service Worker рекомендует основывать утверждения запроса на пользовательском интерфейсе (подробнее см. В рецепте утверждений запроса ). В большинстве случаев, если ваши данные запроса / ответа верны, тогда ваш пользовательский интерфейс будет правильным в тесте. То же верно и для противоположного сценария. По возможности всегда утверждайте пользовательский интерфейс, управляемый данными.

В вашем случае вы хотите утверждать переменные запроса в запросе. Рассмотрите возможность возврата данных на основе тех переменных, которые позже приведут к соответствующему пользовательскому интерфейсу.

Когда вы обнаружите, что абсолютно необходимо выполнять прямые утверждения запроса / ответа отдельно от пользовательского интерфейса, используйте события жизненного цикла, которые позволяют выполнять произвольную логику в ответ на различные события 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(...)
})
Другие вопросы по тегам