Получение тела запроса сотрудника службы макетов и библиотеки тестирования реакций

#reactjs #msw

Вопрос:

Итак, я пишу тесты для одного из своих проектов react, и я просто решил использовать mock service worker, чтобы издеваться над моими вызовами api, и я пытаюсь издеваться над конечной точкой входа.Поэтому я пытаюсь имитировать ошибку входа в систему, когда я возвращаю сообщение об ошибке, когда ввод не соответствует определенному электронному письму. Учитывая приведенный ниже код;

 const server = setupServer(  rest.post("https://testlogin.com/api/v1/login", (req, res, ctx) =gt; {  // the issue is getting the email from the request body something like the code just below  if (req.body["email"] != "test@example.com") {  ctx.status(401);  return res(  ctx.json({  success: false  })  );  }  }) );  

Как я могу это сделать? Есть ли лучший способ сделать это?

Ответ №1:

Вы должны быть в состоянии получить req.body.email значение, указанное в заголовке вашего запроса Content-Type: application/json . Без заголовка типа содержимого ни MSW, ни ваш фактический сервер не могли бы знать, какие данные вы пытаетесь отправить (во всяком случае, это может быть двоичный файл!). Предоставляя правильный заголовок типа содержимого, вы формируете правильный запрос, но также позволяете MSW быть уверенным, что req.body он должен быть проанализирован для объекта.

 // your-code.js fetch('https://testlogin.com/api/v1/login', {  method: 'POST',  headers: {  // Adding this header is important so that "req.body"  // is parsed into an object in your request handler.  'Content-Type': 'application/json'  },  body: JSON.stringify({ login: 'admin@site.com' }) })  
 // your-handlers.js rest.post('https://testlogin.com/api/v1/login', (req, res, ctx) =gt; {  const { login } = req.body   if (login !== 'test@example.com') {  return res(ctx.status(401), ctx.json({ success: false }))  }   return res(ctx.json({ success: true })) })  

Обратите внимание, как ctx.status(401) вызов находится внутри res() вызова функции. Вызов любых ctx[abc] методов за пределами res не приведет ни к какому эффекту, поскольку они зависят от того, чтобы быть завернутыми res .