【问题标题】:How to use the same Node Environment as Axios with Cypress如何在 Cypress 中使用与 Axios 相同的节点环境
【发布时间】:2018-10-24 15:20:11
【问题描述】:

我有一个网站,您可以在其中提交在服务器上启动作业的表单。要开始这项工作,您发送一个请求,并在响应中返回工作 ID。然后,我的网站会请求获取该作业的状态,直到它完成为止。

使用 cypress,我想等到作业完成后再进行下一步。为此,我需要知道工作何时完成。我使用 axios 发出请求,我想将 interceptor 添加到 axios 发出的所有请求中,以便我可以查找创建作业以获取其 id 的请求,然后查找获取其状态的请求所以我可以知道它什么时候完成。

我尝试过这样做,但是当我从我的请求文件中导入 axios 实例时,我注意到我的请求文件中的任何 console.logs 都会被打印两次。这意味着当 cypress 导入变量时,它会再次运行文件,这意味着 cypress 无法访问实际发出请求的 axios 实例,而是只有 cypress 使用的新实例。

当我打印 process.env.NODE_ENV 时,它会使用两个不同的值打印两次

我知道我可以使用Cypress.env('NODE_ENV') 打印环境变量,但显然赛普拉斯没有使用与我的 API 文件相同的变量范围/环境。我也尝试将 cypress.json 设置为

{
    "env" : {
        "NODE_ENV" : "development"
    }
}

并在我的测试文件process.env.NODE_ENV = Cypress.env('NODE_ENV') 的顶部运行它,但这不起作用。我还在终端中尝试了export NODE_ENV = development,我称之为cypress,但这没有用。这也是我用来调用 cypress "cypress": "./node_modules/.bin/cypress open" 的 package.json 中的脚本,我使用的是 cypress 3.1.0 和节点 9.5.0

甚至可以让 cypress 与变量交互吗?是不是我的 cypress 或节点设置错误?

【问题讨论】:

    标签: node.js axios cypress


    【解决方案1】:

    Cypress 确实提供了对 javascript 的本地访问,但只能通过 cy.window(),因此尝试“合并”这两个范围是徒劳的。请注意 cy.window() 需要通过窗口公开变量。例如,您可以使用

    将您的 axios 实例放在窗口上
    const axiosMain = axios.create()
    window.axiosMain = axiosMain
    

    然后您可以使用 cypress 访问 axiosMain

    cy.window().then(win => {
        const { axiosMain } = win
        //... add interceptors here
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2021-02-27
      • 2016-07-14
      相关资源
      最近更新 更多