Protractor 在承诺得到解决之前,防止量角器完成

Protractor 在承诺得到解决之前,防止量角器完成,protractor,Protractor,我有一些异步WebDriverJ处理被跳过,因为测试在解析之前就已经完成了。如何让量角器等待 e、 g.:(这两项测试都应该失败() 如果您需要更多信息,请告诉我 这将返回true。如果您删除超时并仅设置为fulfill,它将工作…我需要有人验证这是正确的方法。但我相信问题在于承诺没有添加到当前控制流中 解决方案: it('test promise with timeout ', function (done) { var wait = protractor.promise.createFl

我有一些异步WebDriverJ处理被跳过,因为测试在解析之前就已经完成了。如何让量角器等待

e、 g.:(这两项测试都应该失败()

如果您需要更多信息,请告诉我


这将返回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