2015-04-14 39 views
3

首先,我们需要讨论Protractor团队和社区提出的一个难题,以实现诸如E2E测试。量角器茉莉花适应正确等待protractor.promise.defer()。promise?

我有一个包装JS类各地,因为我想添加额外的实用方法,以进一步检查ElementFinder的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; 
} 

后来我在茉莉花2.1的值,用期待:

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

根据the official documentation用量角器女王,@juliemrexpect应该等到承诺解决。它似乎在不停地呼啸而过。 看看我的代码已经生成的承诺的实例,我看到它的类型为:goog.scope.promise.Promise。在量角器代码中,我注意到它使用了:webdriver.promise.isPromise(res)。 我也试过用flow.execute打电话没有成功,并且希望避免使用一系列链接的.then调用,因为它使测试更不可读。

会,妥善等待解决上面我的承诺与测试流程移动之前?

如果没有什么是创建由expect量角器的味道进行严格检验承诺对象的正确方法?

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

回答

1

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

承诺是用来表示你还没有的数据值。我没有看到您的示例中没有立即可用的任何内容,因此不清楚您为什么需要承诺。

我想你想是这样的:

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

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

+0

对不起,复制粘贴错误。正确的代码在上面。没有两个承诺。问题仍然存在。 –

+0

我删除了我的答案的一部分。其余的依然适用,我想。 –