我在端到端测试中存有一个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
})

显然,上面的代码不起作用。这只是我正在尝试做的一个例子。

我知道 Cypress 允许使用响应方法,但我无法在他们的文档中的任何地方找到想要执行的语法。如何在我的响应方法中获取请求参数,以便决定返回哪个响应?

最佳答案

遗憾的是cy.server目前不支持此功能。

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

解决方法

使用标准的javascript模拟。您可以使用linked issue中多次提到的cypress onBeforeLoad在测试中运行此模拟。它不漂亮。希望 Cypress 在cy.server中获得 native 支持。

09-25 22:25
查看更多