在第一个expect失败后停止jasmine测试

在第一个expect失败后停止jasmine测试,jasmine,Jasmine,我熟悉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

我熟悉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不支持提前失败,在一个规范中。这个想法是给你所有的失败,以防帮助你找出规范中真正的错误。

@Gregg的答案对于当时最新版本的Jasmine是正确的()

然而,从那时起,这一新功能出现在:

允许用户在预期失败时停止规范执行(修复)

通过将
throwFailures=true
添加到runner页面的查询字符串来激活它,例如:

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

根据我的评论,我发现有两种解决方案:


我刚开始使用量角器jasmine2-fail-whale,因为它似乎有更多的功能。虽然为了在测试失败时截图,我目前使用的是Gragotor-jasmine2-html-reporter。

Jasmine具有故障停止功能,您可以在此处查看:

这将使用
oneFailurePerSpec
属性启动jasmine


如果每次测试都有这么多断言,那么每次测试的代码就太多了。以这种方式开发可能更容易,但当将来的测试失败时,要知道问题出在哪里就困难多了(而且,这也是测试的重点,不是吗?告诉未来的开发人员他/她创建了一个bug)。我觉得茉莉花没有在第一次期待时就停下来是很有用的,它表明一切都出了问题,而不是先出了什么问题。无论如何,就问题本身而言,我已经看了一点,没有发现任何东西可以让它在第一次失败后退出。请记住,在这个特定的示例中,第一个断言(数组长度)是多余的:如果同时也在检查确切的元素,则不需要检查确切的数组长度(因为数组的工作方式内在地暗示了这一点)。在JS中,唯一的例外是当数组的长度是手动设置的,因此它会被
未定义的
元素填充,在这种情况下,您可以断言没有一个元素是
未定义的
,或者数组的长度不大于一个特定的数字。这样,断言将相互完成。什么您建议在OPs这样的情况下使用吗?我们是否应该在expect(array.length).toBe(1);之后检查if,然后尽早返回?要使用node.js中的新功能,请在
jasmine.json的顶层设置
stopSpecOnExpectationFailure:true
,或者运行
jasmine--stop on failure=true
(仅混淆<代码>--故障时停止<代码>被默默忽略)。如果给定,标志将覆盖配置。@beni cherniavsky paskin@tachyonvortex,但使用<代码>StopSpeconeExpectionFailure<代码>停止整个测试集…有一种方法可以只停止单个<代码>它(测试)?