在cypress测试中请求路由时发生CORS错误

时间:2019-05-03 15:34:40

标签: cors cypress

我想模拟我的SPA完成的一些API调用。因此,我正在使用cypress.JS,并通过以下测试检查了如何执行此操作。

it("Then it works", () => {
    axios.defaults.baseURL = 'http://localhost';

    cy.server()
    cy.route("GET", "http://localhost/users/", true)

    axios.get("/users/").then(response => {
        console.log("received response: " + response)
        expect(response.body).to.equal(true)
    }).catch(error => console.log(error))
})

不起作用,我收到错误消息:“从原点“ http://localhost/users/”到“ http://localhost:8080”处对XMLHttpRequest的访问已被CORS策略阻止:没有“ Access-Control-Allow-Origin”标头存在于请求的资源上。”

在测试过程中有什么方法可以防止此错误?我不明白为什么赛普拉斯会以可能发生此错误的方式来处理此简单测试。

2 个答案:

答案 0 :(得分:1)

在您的cypress.json中将chromeWebSecurity设置为false

{
  "chromeWebSecurity": false
}

从赛普拉斯文档here起,将chromeWebSecurity设置为false可以执行以下操作:

  • 显示不安全的内容
  • 导航到任何没有跨域错误的超域
  • 访问嵌入在应用程序中的跨源iframe。

答案 1 :(得分:0)

问题是,我用基本URL localhost:8080配置了cypress

{
  "baseUrl": "http://localhost:8080"
}

但在测试中仅使用了本地主机

   it("Then it works", () => {

    cy.server()           
    cy.route({
        method: 'GET',     
        url: '/users/1',    
        response: true        
    })

    axios.get("http://localhost:8080/users/1").then(response => {
        console.log("received response: " + response)
        expect(response.body).to.equal(true)
    }).catch(error => console.log(error))
})

测试仍然无法进行,但是我的第一个问题得到了解答。发生错误是因为缺少端口。找到其他问题的解决方案时,我将对此进行更新。