Как сделать утверждения о переменных запроса 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(...)
})