Cypress.io - 根据cy.route()中的请求参数以编程方式设置响应

Ema*_*sVI 17 javascript integration-testing end-to-end cypress

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

目前,无论发布什么内容,我的存根都会返回静态响应,如下所示:

cy.server()
cy.route({
    method: 'POST',
    url: '**/redeem-code',
    status: 200,
    response: {
        status: "Success"
    },
    delay: 500
})
Run Code Online (Sandbox Code Playgroud)

我希望能够检查发布的请求参数,然后有条件地决定返回哪个响应.我正在尝试做这样的事情:

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
})
Run Code Online (Sandbox Code Playgroud)

显然,上面的代码不起作用; 这只是我想要做的一个例子.

我知道赛普拉斯允许使用响应方法,但是我找不到我想在他们的文档中做任何事情的语法.如何在响应方法中获取请求参数,以便我可以决定返回哪个响应?

bas*_*rat 6

遗憾的是,目前不支持cy.server.

正在此处跟踪该问题:https : //github.com/cypress-io/cypress/issues/521

解决方法

使用标准的 javascript 模拟。您可以使用 cypress 在测试中运行这个模拟,onBeforeLoad在链接的问题中提到了几次。它不漂亮。希望 cypress 在cy.server.


Tol*_*oli -2

我相信这应该有效

cy.server({
        onResponse: ({ status, url, response }) => {
             if(url !== 'yoururl') return response;
             return { 
                ...response,
               body: { status: status === 1234 ? 'success' : 'failure' }
             };
        }    
});
Run Code Online (Sandbox Code Playgroud)