AssertionError:期望[true]为真

时间:2016-09-19 14:26:15

标签: protractor chai cucumberjs

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

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

在控制台中我有:

  

1个场景(1个通过)   4步(4步)   0m03.618s   [17:06:38] E / launcher - 预期[true]为真   [17:06:38] E / launcher - AssertionError:期望[true]为真

正如你在本案例中看到的那样,尽管断言失败,但测试标记为成功,但是如果在“失败”断言之后还有另一个断言,那么整个事情将会失败。

我正在使用量角器和柴的最新版本。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

接受的答案很棒。接受的答案重申了量角器的投诉,这令人沮丧,但非常明确:

  

...返回数组值[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)

(或者正如接受的答案所说,你可以......"改变你的期望" :))

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

对于您实际期望重复的内容可能更有意义,例如<li>

中的<ul>列表项

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