node.js - 如何在 Cypress 中使用与 Axios 相同的节点环境
问题描述
我有一个网站,您可以在其中提交在服务器上启动工作的表单。要开始这项工作,您发送一个请求,并在响应中返回工作 ID。然后,我的网站会请求获取该作业的状态,直到它完成为止。
使用柏树,我想等到工作完成后再进行下一步。为此,我需要知道工作何时完成。我使用 axios 发出请求,我想为 axios 发出的所有请求添加一个拦截器,这样我就可以查找创建作业以获取其 id 的请求,然后查找获取其状态的请求,以便我可以知道什么时候完成。
我试过这样做,但是当我从我的请求文件中导入 axios 实例时,我注意到我的请求文件中的任何 console.logs 都会打印两次。这意味着当 cypress 导入变量时,它会再次运行文件,这意味着 cypress 无法访问实际发出请求的 axios 实例,而是只有 cypress 使用的新实例。
当我打印 process.env.NODE_ENV 时,它会使用两个不同的值打印两次
我知道我可以打印 env 变量,Cypress.env('NODE_ENV')
但显然 cypress 没有使用与我的 API 文件相同的变量范围/环境。我也尝试将我的 cypress.json 设置为
{
"env" : {
"NODE_ENV" : "development"
}
}
并在我的测试文件顶部运行它,process.env.NODE_ENV = Cypress.env('NODE_ENV')
但这不起作用。我也尝试export NODE_ENV = development
在我称之为 cypress 的终端中,但没有奏效。这也是我用来调用 cypress 的 package.json 中的脚本,我使用的"cypress": "./node_modules/.bin/cypress open"
是 cypress 3.1.0 和节点 9.5.0
甚至有可能让柏树与变量交互吗?我只是有我的柏树或节点设置错误吗?
解决方案
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
}
推荐阅读
- go - 在生产者速度慢、消费者速度快的情况下,如何处理通道关闭同步?
- android - Unity Gradle 构建失败。DexException: 多个 dex 文件定义
- c - C 中的 std::array 等效项
- java - 可以转换 ArrayList
到数组列表 ? - c# - 具有 2 种不同类型的 TaskCompleteSource?
- mongodb - 如何在mongodb的所有文档中向子文档数组中添加一个字段?
- c - C:如何从标准输入读取许多字符串
- python - 需要 Python 帮助。将电子表格中的数据收集到可以保存字符串和数字的数组中的最佳方法是什么
- c# - 从数据库中获取后如何在 CSHTML 中编写@html.actionlink
- r - dplyr:使用来自其他指定列的值创建新列