AssertionError: expected [ true ] to be true

AssertionError: expected [ true ] to be true

我遇到过奇怪的断言问题,所以即使是成功的断言也会被标记为失败,如下所示:

this.expect(this.getWidget('contacts').isNamesDisplayed()).to.eventually.be.true.and.notify(next);

在控制台中我有:

1 scenario (1 passed) 4 steps (4 passed) 0m03.618s [17:06:38] E/launcher - expected [ true ] to be true [17:06:38] E/launcher - AssertionError: expected [ true ] to be true

正如您在本例中看到的,尽管断言失败,但测试标记为成功,但如果在 'failed' 断言之后还有另一个断言,则整个事情都会失败。

我使用的是量角器和 chai 的最新版本。

似乎 this.getWidget('contacts').isNamesDisplayed() 正在返回数组值 [true] 而不是 true。您需要如下更改您的期望语句。

this.expect(this.getWidget('contacts').isNamesDisplayed()).to.eql([true]).and.notify(next);

接受的答案很棒。接受的答案重申了 Protractor 的抱怨,这令人沮丧但非常明确:

... returning an array value [true]...

显然这是 OP 函数的行为 isNamesDisplayed。但可能还有其他原因:

就我而言,我不小心使用了$$,而不是$,我是expect($$('div.to-test').isDisplayed()).toBe(true)$$ 是一个 "Shorthand function for finding arrays of elements by css" 。

所以请注意,一个角色 $ 可能是所有生活问题的原因(和解决方案):expect($('div.to-test').isDisplayed()).toBe(true)

(或者正如公认的答案所说,您可以... "change your expectations" :))

expect($$('div.to-test').isDisplayed()).toBe([true]);

也许对于您实际希望重复的内容更有意义,例如 <ul>

中的 <li> 列表项

expect($$('ul.to-test li').isDisplayed()).toBe([true, true, true]);