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

标签 javascript integration-testing end-to-end cypress

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

目前,无论发布什么内容,我的 stub 都返回一个静态响应,看起来像这样:

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 模拟。您可以使用 cypress onBeforeLoad 在测试中运行此模拟,在 linked issue 中多次提到.它不漂亮。希望 cypress 在 cy.server 中获得原生支持。

关于javascript - Cypress.io - 根据 cy.route() 中的请求参数以编程方式设置响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51975384/

相关文章:

javascript - 如何解决此 Javascript 错误 TypeError : 'undefined' is not an object (evaluating 't.subscribe' )?

testing - 在grails集成测试中重写服务方法

testing - Karate vs 史波克

testing - 需要为 Cypress 测试的图像创建代理

javascript - 列表中项目的动态单击功能的指令...几乎就在那里

JavaScript 在第一个括号后插入文本

javascript - 找不到动态 asp :Control inside a Gridview using JQuery

java - OpenEJB 本地客户端注入(inject)失败

具有许多私有(private)方法的 Java 测试类

javascript - 黑猩猩.js 配置