gpt4 book ai didi

angularjs - Protractor Jasmine适配能否正确等待protractor.promise.defer().promise?

转载 作者:行者123 更新时间:2023-12-03 02:46:42 25 4
gpt4 key购买 nike

首先,向 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();

根据the official documentation通过 Protractor 女王,@juliemrexpect 应该等待直到 Promise 得到解决。仿佛风驰电掣般,一刻不停歇。查看我的代码生成的 Promise 实例,我发现它的类型为:goog.scope.promise.Promise。在 Protractor 代码中,我注意到它使用:webdriver.promise.isPromise(res)。我还尝试使用 flow.execute 包装调用,但没有成功,并且希望避免使用一系列链式 .then 调用,因为它会使测试的可读性降低。

在继续测试流程之前是否会正确等待解决我的上述 promise ?

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

我正在使用全新且 Shiny 的 Protractor 2.0 版本运行。

最佳答案

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

Promise 用于表示您尚未拥有的值。我在您的示例中没有看到任何不能立即可用的内容,因此不清楚为什么您需要 promise 。

我想你想要这样的东西:

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

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

关于angularjs - Protractor Jasmine适配能否正确等待protractor.promise.defer().promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com