2016-09-19 54 views
2

我已经面对陌生的断言问题,所以即使是成功的断言标记为失败,就像这样:Asse田:预计[真]是真实的

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

正如你在这种情况下所看到的那样,尽管断言失败,但测试标记为成功,但在'失败'断言之后还有另一个失败。

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

回答

3

看起来好像this.getWidget('contacts').isNamesDisplayed()返回数组值[true]而不是true。你需要改变你的期望陈述如下。

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

+0

我检查过,你的代码失败: AssertionError:expected [true]等于[true] –

+0

已更新我的回答。使用'to.eql()'而不是'to.Equal()'。有关'to.eql()'[http://chaijs.com/api/bdd/#arguments-section]的更多信息 –

+0

谢谢,它的工作原理。 –

0

接受的答案很好。接受答案重申从量角器的投诉,这是令人沮丧,但很清楚的:

... 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)

(或接受的答案说,你可能只是...“改变你的期待” :))

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

也许更有意义的东西,你其实希望重复,例如在<ul>

<li>列表项

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