Javascript io-基于cy.route()中的请求参数以编程方式设置响应
我在端到端测试中存根了一个api请求,希望能够根据发送的请求参数返回不同的响应 当前,无论发布了什么,我的存根都会返回一个静态响应,如下所示:Javascript io-基于cy.route()中的请求参数以编程方式设置响应,javascript,integration-testing,end-to-end,cypress,Javascript,Integration Testing,End To End,Cypress,我在端到端测试中存根了一个api请求,希望能够根据发送的请求参数返回不同的响应 当前,无论发布了什么,我的存根都会返回一个静态响应,如下所示: cy.server() cy.route({ method: 'POST', url: '**/redeem-code', status: 200, response: { status: "Success" }, delay: 500 }) cy.server() cy.route({
cy.server()
cy.route({
method: 'POST',
url: '**/redeem-code',
status: 200,
response: {
status: "Success"
},
delay: 500
})
cy.server()
cy.route({
method: 'POST',
url: '**/redeem-code',
status: 200,
response: (req) => {
if(req.code == '1234') return { status: "Success" }
else return { status: "Failure" }
},
delay: 500
})
我希望能够检查发布的请求参数,然后有条件地决定返回哪个响应。我正在尝试这样做:
cy.server()
cy.route({
method: 'POST',
url: '**/redeem-code',
status: 200,
response: {
status: "Success"
},
delay: 500
})
cy.server()
cy.route({
method: 'POST',
url: '**/redeem-code',
status: 200,
response: (req) => {
if(req.code == '1234') return { status: "Success" }
else return { status: "Failure" }
},
delay: 500
})
显然,上面的代码不起作用;这只是我想做的一个例子
我知道Cypress允许响应方法,但我在他们的文档中找不到我想要做的任何事情的语法。如何在响应方法中获取请求参数,以便决定返回哪个响应?我认为这应该是可行的
cy.server({
onResponse: ({ status, url, response }) => {
if(url !== 'yoururl') return response;
return {
...response,
body: { status: status === 1234 ? 'success' : 'failure' }
};
}
});
遗憾的是,
cy.server
目前不支持这一点
正在此处跟踪此问题:
变通办法
使用标准javascript模拟。您可以通过使用cypress
onBeforeLoad
在测试中运行此模拟,在中提到过几次。它不漂亮。希望cypress在cy.server
中获得本机支持,我也遇到了同样的问题,并制作了一个功能来启用此功能。它确实需要一个弹出url,但是可以在此处查看代码安装说明谢谢您的建议。你很接近,但没有雪茄。有关更多详细信息,请参阅我更新的问题。EMacsVI,您是否能够找到解决方案?我面临着同样的问题,我也在寻找解决办法