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

时间:2014-03-11 16:32:36

标签: protractor

我有一些异步的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 ..如果你删除超时并只设置完成它将起作用...

3 个答案:

答案 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

Web应用程序端(提供信息)

量角器doesn't know how to wait for setTimeout

但是does know how to wait for $timeout

答案 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");
 });
相关问题