While trying to figure out how to make certain jasmine expect statements dependent on a previous expect statement I discovered that previous to Jasmine 2.3.0, there was not a way. (see Stop jasmine test after first expect fails) However, Jasmine 2.3.0 added an option stopSpecOnExpectationFailure
that when set to true will stop a test on the first failure.
Excited by this prospect, I modified my conf.js to include the option:
/*
* conf.js
*/
exports.config = {
framework: 'jasmine',
specs: ['search-spec.js'],
useAllAngular2AppRoots: true,
jasmineNodeOpts: {
stopSpecOnExpectationFailure: true
}
};
But this did not work for me.
In my test, I have:
/**
* Test option from select element is selected
*/
function verifyOptionSelected(option) {
var myEl = $('select[value="' + option + '"]';
expect(myEl.isPresent()).toBe(true, 'Option, ' + option + ', is not a value in the dropdown list. (It might be the text.)');
expect(myEl.isSelected()).toBe(true, 'Option, ' + option + ', is not selected as expected.');
}
In the code above, both expect statements will be attempted, but I don't need the second to be attempted if the first fails.
Are there any of you who have figured this out with jasmine?
(Yes, I know about jasmine-bail-fast and protractor-fail-fast. However, in my opinion, using the built-in feature is a better solution.)
From what I see in the
protractor
andjasmine-npm
(the jasmine runner thatprotractor
uses) source code, it is not as simple as adding thestopSpecOnExpectationFailure
orstopOnFailure
jasmine node option to the configuration. There has to be changes applied toprotractor
to support the newstopSpecOnExpectationFailure
jasmine node option. Please create an issue/feature request inProtractor
issue tracker.I've also tried to call the
throwOnExpectationFailure
function, set thestopSpecOnExpectationFailure
value throwjasmine.getEnv()
inonPrepare()
but none of that worked. Perhaps, I am missing something and there is a way to enable the setting.