断言数组减少为true

时间:2016-06-13 22:47:17

标签: javascript arrays testing jasmine protractor

在其中一个测试中,我们需要声明存在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 解决它而不明确解析承诺?我们需要一个自定义匹配器,还是可以通过内置匹配器来解决?

2 个答案:

答案 0 :(得分:3)

您只需使用单个选择器获取所有元素,并断言计数优于零:

var title_summary_description = element.all(by.css("#title, #summary, #description"));
expect(title_summary_description.count()).toBeGreaterThan(0);

答案 1 :(得分:2)

检查一下:

let EC = protractor.ExpectedConditions;

let title = EC.visibilityOf($("#title")),
    summary = EC.visibilityOf($("#summary")),
    description = EC.visibilityOf($("#description"));

expect(EC.or(title, summary, description)() ).toBeTruthy('Title or summary or description should be visible on the page')

请注意,我正在执行ExpectedCondition返回的函数 - 所以我得到该函数的结果(Promise将被解析为boolean)而不是函数。

如果需要,可以使用.presenceOf().visibilityOf()

http://www.protractortest.org/#/api?view=ExpectedConditions.prototype.or