我有一些异步的WebDriverJS处理被跳过,因为测试在解决之前就已经完成了。我如何让量角器等待?
例如:(这两项测试都应该失败(potential ticket submitted)
it('test promise ', function (done) {
var d = protractor.promise.defer();
d.fulfill(true)
d.promise.then(function (item) {
console.log("fulfill", item);
});
expect(d.promise)
.toBe(false);
console.log("test done");
});
it('test promise with timeout ', function (done) {
var d = protractor.promise.defer();
setTimeout(function () {
console.log("fulfill");
d.fulfill(true)
}, 3000);
d.promise.then(function (item) {
console.log("fulfill", item);
});
expect(d.promise)
.toBe(false);
console.log("test done");
});
如果您需要更多信息,请告诉我......?
这将返回true ..如果你删除超时并只设置完成它将起作用...
答案 0 :(得分:11)
此修复程序为merged 11 days ago
您可以使用createFlow
,但解决方案会更简单,只需在done()
之后调用fulfill
:
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');
});
目前在主分支机构上,所以希望将其发送到protractor >= 0.23.0
答案 1 :(得分:2)
我无法让Nix的例子工作,所以我接受了加藤的建议并做了以下事情:
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
我确信还有很多方法可以让它发挥作用,但这对我有用。
答案 2 :(得分:1)
我需要有人来验证这是正确的方法..但我相信问题是承诺没有被添加到当前的控制流程中。
解决方案:
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");
});