【问题标题】:Getting response body of mock service worker获取模拟服务人员的响应主体
【发布时间】:2022-08-18 10:43:44
【问题描述】:

我正在尝试使用模拟服务工作者来拦截来自端点的响应,然后修改该 json 响应的一个字段。如果我们有一个端点/user,它返回一个看起来像

users: [{
  user: {
    name: John,
    age: 31,
    occupation: Engineer
  }
}]

我希望能够拦截来自 msw 帖子中的响应并将职业更改为“学生”

所以,我相信我的处理程序应该返回它操纵res 的东西?

rest.post(\'*/users\', (req, res, ctx) => {
  return res((res) => {
    ????
  }
}

这个一般的想法是行不通的,因为模拟的响应体是空的?

  • 如果你在嘲笑你不是真正的端点(这是重点,那么您的测试可以运行得更快)。为什么不直接回复你想要的?
  • @jonrsharpe 有几个原因:首先,我想要端点提供的其余信息(即我想要端点的年龄和姓名,但我希望能够操纵职业)。另外,这个响应直接用在另一个脚本中,所以我不能直接操作响应

标签: javascript mocking msw


【解决方案1】:

看看MSW的Conditional responseInclude failure scenarios

模拟响应取决于请求。我们可以根据请求 url 参数返回不同的模拟响应。我们可以在模拟处理程序的端点添加一个testcase url 参数,使用这个控制处理程序返回不同的模拟响应。

例如。

rest.post('*/users', (req, res, ctx) => {
  return res(
    ctx.json({
      users: [
        {
          user: {
            name: 'John',
            age: 31,
            occupation: req.url.searchParams.get('testcase') === 'student' ? 'Student' : 'Engineer',
          },
        },
      ],
    }),
  );
});

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 2020-12-04
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多