Stop jasmine test after first expect fails
Solution 1
Jasmine doesn't support failing early, in a single spec. The idea is to give you all of the failures in case that helps figure out what is really wrong in your spec.
Solution 2
@Gregg's answer was correct for the latest version of Jasmine at that time (v2.0.0).
However, since then, this new feature was added in v2.3.0:
Allow user to stop a specs execution when an expectation fails (Fixes #577)
It's activated by adding throwFailures=true
to the query string of the runner page, eg:
http://localhost:8000/?throwFailures=true
Solution 3
Jasmine has stop on failure feature and you can check it here: https://plnkr.co/plunk/Ko5m6MQz9VUPMMrC
This starts jasmine with oneFailurePerSpec
property.
Related videos on Youtube
![leech](https://i.stack.imgur.com/lES7P.png?s=256&g=1)
Comments
-
leech over 1 year
I'm familiar with python unittest tests where if an assertion fails, that test is marked as "failed" and it moves on to other tests. Jasmine on the other hand will continue through all expects even if the one of them fails. How can I make Jasmine stop processing a test after the first expectation fails?
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"); });
Am I thinking about it wrong? I have some tests with lots of
expect
's and it seems like a waste to show all the stack traces when only the first is wrong really.-
acdcjunior over 10 yearsIf you have so much asserts per test, your code is testing too much each time. It may be easier to develop this way, but it is much harder to know where the problem is when the tests fail in the future (also, it kind of is the point of tests, no? To tell the future developer s/he created a bug). I kind of find it useful that Jasmine doesnt stop on the first expect, it shows everything went wrong instead of what went wrong first. Anyway, as for the question per se, I have looked a bit and haven't found anything to make it quit after the first fail.
-
John Weisz over 3 yearsKeep in mind though that in this particular example, the first assertion (array length) is redundant: you don't need to check the exact array length if you are then also checking the exact elements anyways (because it's inherently implied by how arrays work). In JS, the only exception to this is when an array's length is set manually and thus it gets padded with
undefined
elements, in which case you could either assert that none of the elements areundefined
, or that the array's length is not greater than a specific number. This way, assertions will complete each other.
-
-
erkangur over 9 yearsWhat do you suggest in situations like OPs? Should we check with an if after expect(array.length).toBe(1); and return early?
-
Beni Cherniavsky-Paskin almost 9 yearsTo use the new feature in node.js, set
"stopSpecOnExpectationFailure": true
on the top level ofjasmine.json
or runjasmine --stop-on-failure=true
(confusing just--stop-on-failure
is silently ignored). If given, flag overrides config. -
Paulo Oliveira almost 8 years@beni-cherniavsky-paskin @tachyonvortex but using
stopSpecOnExpectationOnFailure
stops the entire set of tests... there is a way to ONLY stop a singleit
(test)?