Skip to content

Commit

Permalink
Properly bind "this" for beforeEach/it/afterEach in mocha integration.
Browse files Browse the repository at this point in the history
Fixes issue 7105.
  • Loading branch information
jleyba committed Mar 26, 2014
1 parent e804d9b commit 4b87107
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
4 changes: 4 additions & 0 deletions javascript/node/selenium-webdriver/CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## v2.41.0-dev

* FIXED: 7105: beforeEach/it/afterEach properly bind `this` for Mocha tests.

## v2.40.0

* API documentation is now included in the docs directory.
Expand Down
41 changes: 41 additions & 0 deletions javascript/node/selenium-webdriver/test/testing/index_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2013 Selenium committers
// Copyright 2013 Software Freedom Conservancy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

var assert = require('assert');

var test = require('../../testing');

describe('Mocha Integration', function() {

describe('beforeEach properly binds "this"', function() {
beforeEach(function() { this.x = 1; });
test.beforeEach(function() { this.x = 2; });
it('', function() { assert.equal(this.x, 2); });
});

describe('afterEach properly binds "this"', function() {
it('', function() { this.x = 1; });
test.afterEach(function() { this.x = 2; });
afterEach(function() { assert.equal(this.x, 2); });
});

describe('it properly binds "this"', function() {
beforeEach(function() { this.x = 1; });
test.it('', function() { this.x = 2; });
afterEach(function() { assert.equal(this.x, 2); });
});
});
8 changes: 7 additions & 1 deletion javascript/node/selenium-webdriver/testing/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,13 @@ function wrapped(globalFn) {
function asyncTestFn(fn) {
return function(done) {
this.timeout(0);
flow.execute(fn).then(seal(done), done);
var timeout = this.timeout;
this.timeout = undefined; // Do not let tests change the timeout.
try {
flow.execute(fn.bind(this)).then(seal(done), done);
} finally {
this.timeout = timeout;
}
};
}
}
Expand Down

0 comments on commit 4b87107

Please sign in to comment.