如何在Cypress中使用与Axios相同的节点环境

时间:2018-10-24 15:20:11

标签: node.js axios cypress

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

对于赛普拉斯,我想等到作业完成后再进行下一步。为此,我需要知道工作何时完成。我使用axios发出请求,我想向axios发出的所有请求中添加interceptor,以便我可以查找创建作业的作业以获取其ID,然后查找获得该作业的请求状态,以便我知道何时完成。

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

当我打印process.env.NODE_ENV时,它以两个不同的值打印两次 cypress environment difference

我知道我可以使用Cypress.env('NODE_ENV')打印env变量,但是显然cypress没有使用与我的API文件相同的变量作用域/环境。我还尝试将cypress.json设置为

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

并在我的测试文件process.env.NODE_ENV = Cypress.env('NODE_ENV')的顶部运行它,但这没有用。我还在名为cypress的终端机上尝试了export NODE_ENV = development,但没有成功。这也是我的package.json中的脚本,用于调用cypress "cypress": "./node_modules/.bin/cypress open",我正在使用cypress 3.1.0和node 9.5.0

甚至有可能使柏树与变量相互作用?我只是把柏树或节点设置错了吗?

1 个答案:

答案 0 :(得分:0)

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

将axios实例放在窗口上
Select user_id
(
   select distinct userid
   from yourtable
   where user_id = @userid

) t1
where 
ancestry in ('England', 'France', 'Germany')
group by user_id
having count(user_id) = 3

然后您可以使用

在cypress中访问axiosMain
const axiosMain = axios.create()
window.axiosMain = axiosMain