Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Cypress测试中更新全局变量?_Javascript_Testing_Graphql_Cypress - Fatal编程技术网

Javascript 如何在Cypress测试中更新全局变量?

Javascript 如何在Cypress测试中更新全局变量?,javascript,testing,graphql,cypress,Javascript,Testing,Graphql,Cypress,我想在Cypress测试文件中使用一个全局变量,但它的值并没有像预期的那样改变,尽管添加了等待 const builder = { stepsArr: [] }; describe('my test', () => { beforeEach(() => { cy.intercept('/graphql', (req) => { req.continue((res) => { if (res.body.data?.steps) {

我想在Cypress测试文件中使用一个全局变量,但它的值并没有像预期的那样改变,尽管添加了等待

const builder = {
  stepsArr: []
};
describe('my test', () => {
  beforeEach(() => {
    cy.intercept('/graphql', (req) => {
      req.continue((res) => {
        if (res.body.data?.steps) {
          builder.stepsArr = res.body.data.steps.steps;
          console.log({ stepsArr: builder.stepsArr }); // logs correctly!
        }
      });
    }).as('graphqlRequest');
  });
  it.only('should check global var', () => {
    cy.waitFor('steps');
    cy.wrap({ getStepByTitle: pathwayBuilder.getStepByTitle })
      .invoke('getStepByTitle',
        'some title',
        builder.stepsArr // always empty array!
      )
      .then((stepObj) => {
        cy.log(stepObj);
      });
  });
});
执行顺序正确,但全局变量的值未更新。当我调用函数时,尽管重试了大约100次,但它仍然显示空数组。有什么不对劲吗

等待“脚步声”;来自support/commands.js文件中的命令

该函数只在控制台上记录参数

exports.pathwayBuilder = {
    getStepByTitle: (title, steps) => {
        console.log("Search", title);
        console.log("Steps", steps); // empty!
   }
}
我认为.invoke参数是错误的,请参见此示例

常数fn=a,b,c=>{ 返回a+b+c } cy.wrap{sum:fn} .调用'sum',2,4,6 .应为'be.gt',10//true .和'be.lt',20//true …函数接受三个参数,它们以逗号分隔的形式传递

getStepByTitle接受两个参数,但传入一个参数-一个包含第二个参数的对象

所以

.调用“getStepByTitle”{ 步骤:builder.stepsArr//始终为空数组! } 应该是

.调用'getStepByTitle','aTitle',builder.stepsar 我在运行测试中发现了更多的东西

getStepByTitle需要返回一些内容,否则.invoke的结果将是未定义的

对于我来说,在自定义命令中cy.wait不会成功,但是如果我在ref-Cypress 7.1.0的测试中内联自定义命令的代码,它确实可以工作

cy.wrap{getStepByTitle}.invoke。。。正在cy.wait完成之前进行评估。看起来像某种优化,当命令添加到队列时,Cypress正在调用

替代品

.thenobj=>obj.getStepByTitle'some title',builder.stepsar` 为了

我认为.invoke参数是错误的,请参见此示例

常数fn=a,b,c=>{ 返回a+b+c } cy.wrap{sum:fn} .调用'sum',2,4,6 .应为'be.gt',10//true .和'be.lt',20//true …函数接受三个参数,它们以逗号分隔的形式传递

getStepByTitle接受两个参数,但传入一个参数-一个包含第二个参数的对象

所以

.调用“getStepByTitle”{ 步骤:builder.stepsArr//始终为空数组! } 应该是

.调用'getStepByTitle','aTitle',builder.stepsar 我在运行测试中发现了更多的东西

getStepByTitle需要返回一些内容,否则.invoke的结果将是未定义的

对于我来说,在自定义命令中cy.wait不会成功,但是如果我在ref-Cypress 7.1.0的测试中内联自定义命令的代码,它确实可以工作

cy.wrap{getStepByTitle}.invoke。。。正在cy.wait完成之前进行评估。看起来像某种优化,当命令添加到队列时,Cypress正在调用

替代品

.thenobj=>obj.getStepByTitle'some title',builder.stepsar` 为了


你说得对,但这并不能解决我的问题。我已经试过了。我还看到了一个错误req.continue不是一个函数-您正在运行什么版本的Cypress?我之所以使用v6.8.0,是因为我使用的是v7.0.0 req.continue works,我在文档中也看到了这一点:是的,我只是在升级-到v7.1.0查看上面的注释-现在它对我有效。你是正确的,但这并不能解决我的问题。我已经试过了。我还看到了一个错误req.continue不是一个函数-您正在运行什么版本的Cypress?我之所以使用v6.8.0,是因为我使用的是v7.0.0 req.continue works,我也可以在文档中看到这一点:是的,我只是在升级-到v7.1.0,请参阅上面的说明-现在它对我有效。
exports.pathwayBuilder = {
    getStepByTitle: (title, steps) => {
        console.log("Search", title);
        console.log("Steps", steps); // empty!
   }
}
.invoke('getStepByTitle', 'some title',  builder.stepsArr )