gpt4 book ai didi

javascript - 在级联promise中修改it block 中本地定义的变量时如何修改

转载 作者:行者123 更新时间:2023-12-03 09:31:32 25 4
gpt4 key购买 nike

我想访问/修改级联多个 Promise 中 it block 的本地定义变量

类似这样的事情

describe('make the app to fail',function(){
it('should have error', function(){
var canYouModifyMe = 0;
anArrayofAlertElements.count().then(function(total){
anArrayofAlertElements.get(0).isDisplayed().then(function(value){
canYouModifyMe = 'yes'; // proven that it goes here
});
});
console.log(canYouModifyMe); // Here's the problem, this is still 0. Im expecting it to be "yes"
});
})

我已经在 onPrepare 函数中移动了变量(以使其全局可访问,但不起作用)如何在级联 Promise 中修改 it block 中本地定义的变量?

如果您需要更详细的代码,请检查以下代码。

// html file
// different errors
<div class="alert alert-warning" ng-show="data.error" >
{{(data.message)}}
</div>
<div class="alert alert-warning" ng-show="cart.error" >
{{cart.message}}
</div>
...
- some other error goes here -


// page object
function Util() {
this.getAlertMessages = function(){
return element.all(by.css('.alert'));
}

this.expectAlertMessages = function(){
var that = this;
var errorCount = 0;
this.getAlertMessages().count().then(function(count){
for(i=0;i<count;i++){
that.getAlertMessages().get(i).isDisplayed().then(function(data){
// for debugging purposes, lets make it always true so it increments error count
data = true;
if (data===true) {
errorCount++; // here is the problem. it doesnt increment the above defined variable "errorCount"
}
});
}
return errorCount; // this is still 0
}).then(function(obj){
// errorCount still 0, that is supposedly 1
expect(errorCount).toBeGreaterThan(0);
});
}
}

总之,我只是想测试是否有任何警报消息显示。

我被困在这个问题上,希望有人能帮助我。

最佳答案

这里的问题是,我们正在讨论 promise 异步执行。

当然,当您打印 canYouModifyMe 的值时,您修改值的 promise 中的 callback 尚未执行。尝试下面的代码,看看执行顺序是否不同:

describe('make the app to fail',function(){
it('should have error', function(done){
var canYouModifyMe = 0;
anArrayofAlertElements.count().then(function(total){
anArrayofAlertElements.get(0).isDisplayed().then(function(value){
canYouModifyMe = 'yes'; // proven that it goes here
console.log('Inside callback. Current value is', canYouModifyMe);
done();
});
});
console.log('Current value is', canYouModifyMe); // Here's the problem, this is still 0. Im expecting it to be "yes"
});
})

此外,您应该注意到上面代码中另一个 done 回调的使用。这是关于异步执行和 jasmine 的另一个细节。基本上,通过运行该回调,我们告诉 test (spec) 它的执行已完成。

关于javascript - 在级联promise中修改it block 中本地定义的变量时如何修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31490256/

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