赛普拉斯(Cypress):同一路由的Stub响应具有三个不同的响应

Dig*_*yay 5 javascript ui-automation cypress

我在应用程序中有一个端点。对于每个请求,我们在参数中使用相同的api进行不同的操作。

网址:

/application/api
Run Code Online (Sandbox Code Playgroud)

样本请求有效负载1:

{
  "action": "CARD_TRANSACTION_HISTORY",
  "data": {
    "date_from": "2018-12-01",
    "date_to": "2018-12-31",
    "total": 5
  },
  "meta": {}
}
Run Code Online (Sandbox Code Playgroud)

样本请求有效负载2:

{
  "action": "CARD_BALANCE",
  "data": {
    "date_from": "2018-12-01",
    "date_to": "2018-12-31",
    "total": 5
  },
  "meta": {}
}
Run Code Online (Sandbox Code Playgroud)

样本请求有效负载3:

{
  "action": "CURRENCY_RATES",
  "data": {
    "date_from": "2018-12-01",
    "date_to": "2018-12-31",
    "total": 5
  },
  "meta": {}
}
Run Code Online (Sandbox Code Playgroud)

上述请求中的操作会针对不同的请求进行更改。

加载仪表板页面后,我们将触发3个并发的 AJAX POST请求,并执行不同的操作。

赛普拉斯的问题是您只能为一条路线指定一个响应,而处理此问题的另一种方法是发出顺序请求(我们不能这样做)

即使我们将响应作为函数编写,它也只会被调用一次。

关于如何根据有效载荷模拟数据的任何想法?

nic*_*nck 6

我遇到了完全相同的问题,发现@Richard Matsen 的回答非常有用,但是在使用该whitelist选项时,无法访问proxy.request,它返回undefined. 但是,如果您使用onRequest而不是whitelist,您可以访问该请求,从而根据该请求的正文实施任何操作。

所以这应该有效:

cy.server({
  onRequest: (xhr) => {
    xhr.url = xhr.url + 
      xhr.request.body.action  == 'CARD_TRANSACTION_HISTORY' ? '?transactionHistory'
      : xhr.request.body.action  == 'CARD_BALANCE' ? '?balance'
      : xhr.request.body.action  == 'CURRENCY_RATES' ? '?currencyRates'
      : ''
  }
})
Run Code Online (Sandbox Code Playgroud)


Dig*_*yay 3

我做了一件肮脏的工作,虽然有效,但我不喜欢它,但我别无选择。

我只是将所有回复合并到同一个回复中。

我的模拟回复

{
  balance: {..},
  transactionHistory: {..},
  currencyRates: {..}
}
Run Code Online (Sandbox Code Playgroud)

每个响应处理程序只处理它感兴趣的部分,如果其中一个响应是数组,我们需要将其更改为对象。

我将寻找更好的解决方法。