【发布时间】:2016-06-13 22:47:16
【问题描述】:
在其中一项测试中,我们需要断言 3 个元素之一存在。目前我们正在使用protractor.promise.all() 和Array.reduce():
var title = element(by.id("title")),
summary = element(by.id("summary")),
description = element(by.id("description"));
protractor.promise.all([
title.isPresent(),
summary.isPresent(),
description.isPresent()
]).then(function (arrExists) {
expect(arrExists.reduce(function(a,b) { return a || b; })).toBe(true);
});
有没有更好的方法 来用 Jasmine 解决这个问题而不明确解决承诺?我们需要自定义匹配器还是可以使用内置匹配器来解决?
【问题讨论】:
-
请注意,您可以使用
arrExists.some(function (a) {return a;})代替reduce。使用 Jasmine,您可以使用doneargument in theitcallback,并在完成测试后调用它。我不认为有更好的方法。无论如何,您都需要等待承诺解决。 -
@trincot 谢谢你的意见。我可能应该提到
expect()is "patched" in Protractor to implicitly resolve promises..但由于我必须将多个承诺的结果相互结合,在这种情况下可能无济于事。 -
您应该提供
false作为初始值,以便它也适用于空数组。或者直接使用.some(Boolean)。
标签: javascript arrays testing jasmine protractor