Javascript io-基于cy.route()中的请求参数以编程方式设置响应

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({

我在端到端测试中存根了一个api请求,希望能够根据发送的请求参数返回不同的响应

当前,无论发布了什么,我的存根都会返回一个静态响应,如下所示:

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,您是否能够找到解决方案?我面临着同样的问题,我也在寻找解决办法