Protractor, Jasmine, and stopping test on first fail
Asked Answered
I

2

8

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.)

Imperialism answered 19/5, 2016 at 21:12 Comment(0)
I
6

From what I see in the protractor and jasmine-npm (the jasmine runner that protractor uses) source code, it is not as simple as adding the stopSpecOnExpectationFailure or stopOnFailure jasmine node option to the configuration. There has to be changes applied to protractor to support the new stopSpecOnExpectationFailure jasmine node option. Please create an issue/feature request in Protractor issue tracker.


I've also tried to call the throwOnExpectationFailure function, set the stopSpecOnExpectationFailure value throw jasmine.getEnv() in onPrepare() but none of that worked. Perhaps, I am missing something and there is a way to enable the setting.

Incorporation answered 20/5, 2016 at 18:12 Comment(0)
M
0

Execute npm install protractor-fail-fast

Then in protractor.conf.js

const failFast = require('protractor-fail-fast');

...
exports.config = {
  plugins: [
    failFast.init(),
  ],
  afterLaunch: function () {
    failFast.clean(); // Removes the fail file once all test runners have completed.
  },
}

enter image description here

Moreno answered 28/1, 2022 at 18:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.