Javascript 如何在Cypress测试中更新全局变量?
我想在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) {
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 )