gpt4 book ai didi

jasmine - done() 用于什么以及如何使用它( Protractor 、 Jasmine )

转载 作者:行者123 更新时间:2023-12-04 14:40:24 27 4
gpt4 key购买 nike

it('should for something', function check(done) {
browser.sleep(2000);
$('.csTx').isPresent().then(function(result) {
if(result) {
done();
} else {
xPage.clickBack();
check(done);
}
})
}, 30000);

有人可以解释 done() 是如何工作的以及这是做什么的。我用谷歌搜索了它,但找不到任何足以让我理解的信息。我正在使用 Protractor 和 Jasmine 进行自动化。请考虑上面的代码。

最佳答案

您需要使用 done如果您的测试在您的测试的控制流中创建了一个并行的 TaskQueue(阅读有关 promises and control flow 的更多信息)。

例如:

describe('Control Flow', function() {
function logFromPromise(text) {
var deferred = protractor.promise.defer();
deferred.then(function() {
console.log(text);
});
deferred.fulfill();
return deferred;
}

it('multiple control flows', function() {
setTimeout(function() {
logFromPromise('1');
});
logFromPromise('0');
});
}

调用 setTime在控件中创建一个并行任务队列:
ControlFlow
| TaskQueue
| | Task<Run fit("multiple control flows") in control flow>
| | | TaskQueue
| | | | Task <logFromPromise('0');>
| TaskQueue
| | Task <setTimeout>

Protractor 认为测试在 0 之后“完成”被打印。在本例中, 1可能会在测试完成后打印出来。让 Protractor 等待 Task <setTimeout> ,需要调用 done 函数:
    it('multiple control flows', function(done) {
setTimeout(function() {
logFromPromise('1').then(function() {
done();
});
});
logFromPromise('0');
});

如果可以,让 Protractor 在测试“完成”后处理。拥有并行任务队列可能会导致测试中出现意外的竞争条件。

关于jasmine - done() 用于什么以及如何使用它( Protractor 、 Jasmine ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281591/

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