【问题标题】:Stop jasmine test after first expect fails第一次期望失败后停止茉莉花测试
【发布时间】:2014-03-01 19:25:56
【问题描述】:

我熟悉 python unittest 测试,如果断言失败,则该测试被标记为“失败”并继续进行其他测试。另一方面,即使其中一个失败,茉莉花也会继续完成所有期望。在第一个期望失败后,如何让 Jasmine 停止处理测试?

it ("shouldn't need to test other expects if the first fails", function() {
    expect(array.length).toBe(1);

    // don't need to check this if the first failed.
    expect(array[0]).toBe("foo");
});

我想错了吗?我有很多expect 的测试,当只有第一个确实错误时,显示所有堆栈跟踪似乎是一种浪费。

【问题讨论】:

  • 如果您每次测试有这么多断言,那么您的代码每次测试太多。以这种方式开发可能更容易,但是当将来测试失败时,要知道问题出在哪里要困难得多(而且,这是测试的重点,不是吗?告诉未来的开发人员她/他创建一个错误)。我觉得 Jasmine 不会在第一次期望时停止很有用,它表明一切都出了问题,而不是首先出了什么问题。无论如何,至于问题本身,我看了一点,在第一次失败后没有找到任何让它退出的东西。
  • 请记住,尽管在这个特定的示例中,第一个断言(数组长度)是多余的:如果您当时是,则不需要需要检查确切的数组长度无论如何也要检查确切的元素(因为数组的工作方式固有地暗示了它)。在 JS 中,唯一的例外是手动设置数组的长度并因此用undefined 元素填充,在这种情况下,您可以断言没有元素是undefined,或者数组的长度是不大于一个特定的数字。这样,断言将相互完成。

标签: jasmine


【解决方案1】:

@Gregg 的回答对于当时最新版本的 Jasmine (v2.0.0) 是正确的。

不过,从那以后,这个新功能在added 中为v2.3.0

允许用户在期望失败时停止规范执行(修复 #577

通过在运行器页面的查询字符串中添加throwFailures=true来激活,例如:

http://localhost:8000/?throwFailures=true

【讨论】:

  • 要使用 node.js 中的新功能,请在 jasmine.json 的顶层设置 "stopSpecOnExpectationFailure": true 或运行 jasmine --stop-on-failure=true(混淆只是 --stop-on-failure 会被忽略)。如果给定,标志会覆盖配置。
  • @beni-cherniavsky-paskin @tachyonvortex 但使用 stopSpecOnExpectationOnFailure 会停止整个测试集...有一种方法可以停止单个 it (测试)?
【解决方案2】:

Jasmine 不支持在单一规范中提前失败。我们的想法是为您提供所有失败的情况,以帮助您找出规范中的真正错误。

【讨论】:

  • 在像 OP 这样的情况下,您有什么建议?我们是否应该在 expect(array.length).toBe(1); 之后检查 if早点回来?
【解决方案3】:

Jasmine 具有故障停止功能,您可以在此处查看: https://plnkr.co/plunk/Ko5m6MQz9VUPMMrC

这以 oneFailurePerSpec 属性开始 jasmine。

【讨论】:

    【解决方案4】:

    根据https://github.com/jasmine/jasmine/issues/414 的cmets,我发现有两种解决方案: https://github.com/radialanalytics/protractor-jasmine2-fail-whale https://github.com/Updater/jasmine-fail-fast

    我刚开始使用 protractor-jasmine2-fail-whale,因为它似乎有更多的功能。虽然为了在测试失败的情况下截屏,我目前使用 protractor-jasmine2-html-reporter。

    【讨论】:

      【解决方案5】:

      我在 Appium 中使用 Jasmine(一个测试 React Native 应用程序的工具)。

      我通过在 Jasmine 配置中添加 stopSpecOnExpectationFailure=true 解决了这个问题

      jasmine v3.8.0 & jasmine-core v3.8.0

      【讨论】:

        猜你喜欢
        • 2016-09-16
        • 1970-01-01
        • 2014-06-01
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-30
        相关资源
        最近更新 更多