Skip to content

Commit

Permalink
#1039 Fail tests when error provided to test hook done callback
Browse files Browse the repository at this point in the history
  • Loading branch information
ianwsperber authored and beatfactor committed Jun 11, 2017
1 parent a2810c4 commit 5ecf985
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 9 deletions.
13 changes: 6 additions & 7 deletions lib/runner/testsuite.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,12 @@ TestSuite.prototype.initHooks = function() {
var called = false;
var originalFn = self.module.get(key);

var doneFn = function() {
var doneFn = function(err) {
called = true;
if (callbackDeffered) {
return;
}
return done();
return done(err, true);
};

self.runHookMethod(item, context, argsCount, key, doneFn, this.deferred);
Expand Down Expand Up @@ -177,8 +177,8 @@ TestSuite.prototype.initAfterEachHook = function() {
if (self.options.compatible_testcase_support) {
asyncFn.call(module, doneFn);
} else {
asyncFn.call(module, api, function() {
doneFn();
asyncFn.call(module, api, function(err) {
doneFn(err);
});
}

Expand Down Expand Up @@ -509,9 +509,8 @@ TestSuite.prototype.adaptDoneCallback = function(done, hookName, deferred) {
TestSuite.prototype.makePromise = function (fn) {
var deferred = Q.defer();
try {
fn.call(this, function(err, hookErr) {
// in case of an exception thrown inside a global hook, we need to reject the promise here
if (hookErr && Utils.isErrorObject(err)) {
fn.call(this, function(err, rejectOnError) {
if (rejectOnError && Utils.isErrorObject(err)) {
deferred.reject(err);
} else {
deferred.resolve();
Expand Down
11 changes: 11 additions & 0 deletions test/asynchookstests/async-provide-error/after.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module.exports = {
demoTest : function (client) {
client.url('http://localhost')
.assert.elementPresent('#weblogin')
.end();
},

after : function(client, done) {
done(new Error('Provided error after'));
}
};
11 changes: 11 additions & 0 deletions test/asynchookstests/async-provide-error/afterEach.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module.exports = {
demoTest : function (client) {
client.url('http://localhost')
.assert.elementPresent('#weblogin')
.end();
},

afterEach : function(client, done) {
done(new Error('Provided error afterEach'));
}
};
11 changes: 11 additions & 0 deletions test/asynchookstests/async-provide-error/before.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module.exports = {
demoTest : function (client) {
client.url('http://localhost')
.assert.elementPresent('#weblogin')
.end();
},

before : function(client, done) {
done(new Error('Provided error before'));
}
};
11 changes: 11 additions & 0 deletions test/asynchookstests/async-provide-error/beforeEach.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module.exports = {
demoTest : function (client) {
client.url('http://localhost')
.assert.elementPresent('#weblogin')
.end();
},

beforeEach : function(client, done) {
done(new Error('Provided error beforeEach'));
}
};
43 changes: 41 additions & 2 deletions test/src/runner/testRunWithHooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ var common = require('../../common.js');
var CommandGlobals = require('../../lib/globals/commands.js');
var Runner = common.require('runner/run.js');

module.exports = {
var tests = {
'testRunWithHooks' : {
before: function (done) {
CommandGlobals.beforeEach.call(this, done);
Expand Down Expand Up @@ -174,7 +174,7 @@ module.exports = {
persist_globals : true,
globals: globals
}, {
output_folder: false,
output_folder: false,
start_session: true
}, function (err, results) {
if (err) {
Expand Down Expand Up @@ -219,3 +219,42 @@ module.exports = {
}
}
};

var hooks = ['before', 'after', 'beforeEach', 'afterEach'];

hooks.forEach(function (hook) {
var provideErrorTest = 'test async ' + hook + ' hook provide error';

tests.testRunWithHooks[provideErrorTest] = function (done) {
var provideErrorTestPath = path.join(__dirname,
'../../asynchookstests/async-provide-error/' + hook + '.js');
var expectedErrorMessage = 'Provided error ' + hook;

var globals = {
calls : 0,
asyncHookTimeout: 10
};

var runner = new Runner([provideErrorTestPath], {
seleniumPort: 10195,
silent: true,
output: false,
persist_globals : true,
globals: globals
}, {
output_folder: false,
start_session: true
}, function (err, results) {
assert.equal(err.message, expectedErrorMessage);
assert.ok(err instanceof Error);

done();
});

runner.run().catch(function(err) {
done(err);
});
};
});

module.exports = tests;

0 comments on commit 5ecf985

Please sign in to comment.