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请求,并执行不同的操作。
赛普拉斯的问题是您只能为一条路线指定一个响应,而处理此问题的另一种方法是发出顺序请求(我们不能这样做)
即使我们将响应作为函数编写,它也只会被调用一次。
关于如何根据有效载荷模拟数据的任何想法?
我遇到了完全相同的问题,发现@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)
我做了一件肮脏的工作,虽然有效,但我不喜欢它,但我别无选择。
我只是将所有回复合并到同一个回复中。
我的模拟回复
{
balance: {..},
transactionHistory: {..},
currencyRates: {..}
}
Run Code Online (Sandbox Code Playgroud)
每个响应处理程序只处理它感兴趣的部分,如果其中一个响应是数组,我们需要将其更改为对象。
我将寻找更好的解决方法。