【问题标题】:How to fix cy.route() data type response issue?如何修复 cy.route() 数据类型响应问题?
【发布时间】:2019-08-02 09:31:01
【问题描述】:

我尝试使用 Cypress.io cy.route() 来管理网络请求的行为。 编写了一个存根来替换应用程序的网络行为以测试 UI。

后端返回 JSON 格式的字符串类型响应的预期结果。 引号或双引号不应出现在括号外。

预期结果示例:

{"mockdata":"mock"}

但是,我的应用在测试期间一直返回对象类型的响应, 比如

{mockdata:"mock"}

如何让 Mock API 返回字符串类型的响应?谢谢。

下面附上我的测试代码:

context('mock API', function () {
    before(function () {
        cy.server()
        cy.route({
            method: 'POST',
            url: '/category/menu',
            response: '{"mockdata":"mock"}'
        }).as('rootBlock')

    }
    it('use mock API', function () {
        cy.visit('/')
        cy.wait('@rootBlock')
    })

}

以及我的APP使用JQuery的示例代码:

$.ajax({
    url: '/category/menu',
    type: 'POST',
    success: function (json) {
        console.log(typeof json)
          // Expect String to be returned
          // but it always return as Object during a cypress test
        var jsonData = $.parseJSON(json).mockdata
          // throwing errors...
    }
});

而我的系统是:Win7 x64

node.js:v10.14.1

Cypress.io:v3.4.1

【问题讨论】:

    标签: javascript jquery node.js cypress


    【解决方案1】:

    您的模拟尝试自动将您的响应转换为 JSON 对象(应该如此)。

    如果你想返回一个字符串,你应该对你的对象进行字符串化:

    response: JSON.stringify({"mockdata":"mock"}) 应该可以工作。

    你也可以添加一个标题属性:

    header: {
        'Content-Type': 'text/html'
    },
    

    但在你的情况下它不应该是强制性的

    您还可以查看那里的文档: https://docs.cypress.io/api/commands/route.html

    【讨论】:

    • 感谢您的及时回复!我更新了 header 属性,它起作用了!非常感谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 2019-07-10
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多