Protractor AssertionError:预期[true]为true

Protractor AssertionError:预期[true]为true,protractor,chai,cucumberjs,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/发射器-预期[正确]为正确 [17:06:38]E/launcher-AssertionError:预期[true]为

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

this.expect(this.getWidget('contacts').isNamesDisplayed()).to.eventually.be.true.and.notify(next);
在控制台中,我有:

1个场景(1个已通过) 4个步骤(4个通过) 0m03.618s [17:06:38]E/发射器-预期[正确]为正确 [17:06:38]E/launcher-AssertionError:预期[true]为true

正如您在本例中看到的,尽管断言失败,但测试仍标记为成功,但如果在“失败”断言之后还有另一个断言,则整个测试都将失败


我用的是量角器和柴的最新版本

这个.getWidget('contacts').isNamesDisplayed()似乎返回的是数组值
[true]
,而不是
true
。您需要更改expect语句,如下所示


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

公认的答案很好。被接受的答案重申了Grandor的投诉,虽然令人沮丧,但非常清楚:

。。。正在返回数组值[true]

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

在我的例子中,我无意中使用了
$$
,而不是
$
,并且我被
expect($$('div.to-test').isDisplayed()).toBe(true)
<代码>$$
是一个“”

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

(或者,正如公认的答案所说,你可以“改变你的期望”:)

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

可能对于您实际希望重复的内容更有意义,例如
  • 中的列表项


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

    我已经检查过了,您的代码失败了:AssertionError:expected[true]等于[true]更新了我的答案。使用
    to.eql()
    而不是
    to.Equal()
    。有关
    to.eql()
    [