如何解决cy.route()数据类型响应问题?

时间:2019-08-02 09:31:01

标签: javascript jquery node.js cypress

我尝试使用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')
    })

}

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

$.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

1 个答案:

答案 0 :(得分:0)

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

如果要返回字符串,则应将对象字符串化:

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

此外,您还可以添加带有以下内容的标头属性:

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

但在您的情况下不是强制性的

您也可以在此处查看文档: https://docs.cypress.io/api/commands/route.html