3

首先,向 Protractor 团队和社区致敬,因为他们提出了这样一个库来解决诸如 E2E 测试之类的棘手问题。

我在 ElementFinder 周围有一个包装 JS 类,因为我想添加额外的实用程序方法来进一步检查 ElementFinder。当我返回此类对象的实例时,我将其返回:

function myFunc(){
   var myElement = element(by.binding('plan.name'));
   var deferred = protractor.promise.defer();
   var myWrapper = new myElementWrapper(myElement);
   deferred.fulfill(myWrapper);
   return deferred.promise;
}

稍后我希望 Jasmine 2.1 中的值使用:

var val=myFunc();
expect(val).not.toBeNull();

根据Protractor 女王@juliemr的官方文档,应该等到承诺解决。它似乎在不停地掠过。查看我的代码生成的 promise 实例,我发现它的类型是:。在量角器代码中,我注意到它正在使用:。我也尝试过包装调用但没有成功,并希望避免使用一系列链接调用,因为它会使测试的可读性降低。expectgoog.scope.promise.Promisewebdriver.promise.isPromise(res)flow.execute.then

在继续测试流程之前,这是否会正确地等待解决我上面的承诺?

如果不是,那么创建 Protractor 的风格正确检查的 Promise 对象的正确方法是expect什么?

我正在使用新的闪亮的 Protractor 2.0 版本运行。

4

1 回答 1

1

您创建一个 deferred 然后立即履行 deferred 并返回它的承诺(这只是myWrapper直接返回对象的一种复杂方式)。

Promise 用于表示您还没有的值。我在您的示例中没有看到任何无法立即使用的内容,因此不清楚您为什么需要承诺。

我想你想要这样的东西:

function myFunc() {
   var myElement = element(by.binding('plan.name'));
   return new myElementWrapper(myElement);
}

myElementWrapper但是,如果您想将它传递给,您应该看起来像一个承诺expect(如果您扩展现有的 ElementFinder 就足够了)。

于 2015-04-15T03:31:52.120 回答