【问题标题】:AssertionError: expected [ true ] to be trueAssertionError:预期 [ true ] 为 true
【发布时间】:2016-09-19 14:26:14
【问题描述】:

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

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

在控制台中我有:

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

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

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

【问题讨论】:

    标签: protractor chai cucumberjs


    【解决方案1】:

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

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

    【讨论】:

    • 我已经检查过了,你的代码失败了: AssertionError: expected [ true ] to equal [ true ]
    • 更新了我的答案。使用to.eql() 而不是to.Equal()。有关to.eql() [chaijs.com/api/bdd/#arguments-section] 的更多信息
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 2023-04-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多