Protractor 在承诺得到解决之前,防止量角器完成
我有一些异步WebDriverJ处理被跳过,因为测试在解析之前就已经完成了。如何让量角器等待 e、 g.:(这两项测试都应该失败() 如果您需要更多信息,请告诉我Protractor 在承诺得到解决之前,防止量角器完成,protractor,Protractor,我有一些异步WebDriverJ处理被跳过,因为测试在解析之前就已经完成了。如何让量角器等待 e、 g.:(这两项测试都应该失败() 如果您需要更多信息,请告诉我 这将返回true。如果您删除超时并仅设置为fulfill,它将工作…我需要有人验证这是正确的方法。但我相信问题在于承诺没有添加到当前控制流中 解决方案: it('test promise with timeout ', function (done) { var wait = protractor.promise.createFl
这将返回true。如果您删除超时并仅设置为fulfill,它将工作…我需要有人验证这是正确的方法。但我相信问题在于承诺没有添加到当前控制流中 解决方案:
it('test promise with timeout ', function (done) {
var wait = protractor.promise.createFlow(function(flow){
var d = protractor.promise.defer();
flow.execute(function(){
setTimeout(function () {
console.log("fulfill");
d.fulfill(true)
}, 3000);
});
});
expect(wait).toBe(false);
console.log("test done");
});
量角器侧
这个问题的解决方法是
您可以让它与createFlow
一起工作,但解决方案会简单得多,只需在fulfill
之后调用done()
,如下所示:
it('test promise with setTimeout ', function(done) {
var d = protractor.promise.defer();
setTimeout(function() {
console.log("fulfill");
d.fulfill('ok');
done();
}, 3000);
expect(d).toBe('ok');
});
目前在主分支上,因此希望在
Web应用程序端(信息性)
量角器
但是我无法让尼克斯的例子起作用,因此我采纳了加藤的建议,并做了以下工作:
describe('Tests stuff', function () {
function do_work() {
var d = protractor.promise.defer();
protractor.promise.controlFlow().execute(function () {
setTimeout(function () {
console.log("fulfill");
d.fulfill(true)
}, 3000);
});
return d;
}
it('test promise with timeout ', function () {
protractor.promise.controlFlow().wait(do_work).then(function (done) {
console.log("test done:" + done);
});
});
});
输出与预期一致,方法正确等待,然后执行下一个流。我的输出:
Started
fulfill
test done:true
我确信还有很多其他方法可以让它工作,但是这对我来说很有效。测试不会在expect(d)之前结束吗。toBe('ok')运行了吗?我刚刚运行了它,测试按预期耗时3秒并通过了。expect(d)将保持到d完成。可能是因为expect(d)在完成之前经过了评估()这是有道理的。这也是因为量角器修补了Jasmine expect(),所以它总是等待承诺被解析。请参阅,您似乎也可以使用
量角器.promise.controlFlow().execute(methodThatReturnsPromise);
(不需要expect
、wait var或某种嵌套布局)。
Started
fulfill
test done:true