gpt4 book ai didi

javascript - 为什么 it() 内部的 cypress 变量保留为分配给该变量的最后一个值,而在 it() 外部它可以正常工作? (例子)

转载 作者:行者123 更新时间:2023-12-04 14:53:17 26 4
gpt4 key购买 nike

如果我的代码是:

context('The Test', () => {
let testStr = 'Test A'
it(`This test is ${testStr}`, () => {
expect(testStr).to.eq('Test A')
})

testStr = 'Test B'
it(`This test is ${testStr}`, () => {
expect(testStr).to.eq('Test B')
})

testStr = 'Test C'
it(`This test is ${testStr}`, () => {
expect(testStr).to.eq('Test C')
})
})
This image has the resulting tests -- 我在反引号中对 testStr 的使用按照我想要的方式工作(由具有正确测试标题的测试 A、测试 B 和测试 C 的输出指示),但是在 expect(testStr).to.eq 中使用 testStr case 未通过前 2 个测试,因为这些检查的 testStr 始终是“测试 C”。为什么会发生这种情况,我怎样才能以不同的方式写这个来做我想做的事?

最佳答案

it()的回调将仅在 parent 的回调之后执行(在您的情况下为 context)。
您可以在调试器中使用它并实时查看它:
enter image description here
因此 mocha 将分配最终的 'Test C' 值并调用第一个 it()之后回调。
为了尽可能接近当前方法的结构来解决问题,您可以使用 mocha 上下文来捕获定义 it() 时的值。案子。不幸的是,我发现 mocha 在所有 it 之间共享上下文对象。 sibling 。所以我不得不把每个箱子都包在一个 child 里面 context :

context('The Test', function () {
let curTestStr = 'Test A'

context(`This test is ${curTestStr}`, () => {
it("test", function() {
expect(this.curTestStr).to.eq('Test A')
})
}).ctx.curTestStr = curTestStr;

curTestStr = 'Test B'
context(`This test is ${curTestStr}`, () => {
it("test", function() {
expect(this.curTestStr).to.eq('Test B')
})
}).ctx.curTestStr = curTestStr;

curTestStr = 'Test C'
context(`This test is ${curTestStr}`, () => {
it("test", function() {
expect(this.curTestStr).to.eq('Test C')
})
}).ctx.curTestStr = curTestStr;
})
另请注意,您必须使用 function回调以从 this 访问变量.它不适用于箭头函数表达式 () => {}

关于javascript - 为什么 it() 内部的 cypress 变量保留为分配给该变量的最后一个值,而在 it() 外部它可以正常工作? (例子),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68656785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com