From cc6437db93f5bfb85f3b9d9d4a9ca40579a4e015 Mon Sep 17 00:00:00 2001 From: Rostislav Shtanko Date: Thu, 25 Aug 2016 18:18:36 +0300 Subject: [PATCH 1/2] abort session in case of error --- lib/runner/browser-runner/browser-agent.js | 8 +++++++ .../suite-runner/regular-suite-runner.js | 22 ++++++++++++++++--- .../runner/browser-runner/browser-agent.js | 17 ++++++++++++++ .../suite-runner/regular-suite-runner.js | 19 ++++++++++++++++ 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/lib/runner/browser-runner/browser-agent.js b/lib/runner/browser-runner/browser-agent.js index 0926a78ae..9ccc877c8 100644 --- a/lib/runner/browser-runner/browser-agent.js +++ b/lib/runner/browser-runner/browser-agent.js @@ -6,6 +6,11 @@ var BrowserAgent = inherit({ __constructor: function(browserId, pool) { this.browserId = browserId; this._pool = pool; + this._force = false; + }, + + invalidateSession: function() { + this._force = true; }, getBrowser: function() { @@ -13,6 +18,9 @@ var BrowserAgent = inherit({ }, freeBrowser: function(browser, opts) { + opts = opts || {}; + opts.force = this._force; + return this._pool.freeBrowser(browser, opts); } }, { diff --git a/lib/runner/suite-runner/regular-suite-runner.js b/lib/runner/suite-runner/regular-suite-runner.js index 8baa0c889..e45b224ed 100644 --- a/lib/runner/suite-runner/regular-suite-runner.js +++ b/lib/runner/suite-runner/regular-suite-runner.js @@ -12,6 +12,7 @@ const SuiteRunner = require('./suite-runner'); const StateRunner = require('../state-runner'); const cloneError = require('../../errors/utils').cloneError; +const NoRefImageError = require('../../errors/no-ref-image-error'); module.exports = class RegularSuiteRunner extends SuiteRunner { constructor(suite, browserAgent, config) { @@ -25,7 +26,11 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { return this._browserAgent.getBrowser() .then((browser) => this._initSession(browser)) .then(() => this._processStates(stateProcessor)) - .catch((e) => this._passErrorToStates(e)) + .catch((e) => { + this._handleError(e); + + return this._passErrorToStates(e); + }) .fin(() => this._session && this._browserAgent.freeBrowser(this._session.browser)); } @@ -87,6 +92,12 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { return promiseUtils.seqMap(this._suite.states, (state) => this._runStateInSession(state, stateProcessor)); } + _handleError(error) { + if (!(error instanceof NoRefImageError)) { + this._browserAgent.invalidateSession(); + } + } + _runStateInSession(state, stateProcessor) { const runner = StateRunner.create(state, this._session, this._config); @@ -97,10 +108,15 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { RunnerEvents.TEST_RESULT, RunnerEvents.CAPTURE, RunnerEvents.UPDATE_RESULT, - RunnerEvents.WARNING, - RunnerEvents.ERROR + RunnerEvents.WARNING ]); + runner.on(RunnerEvents.ERROR, (e) => { + this._handleError(e); + + this.emit(RunnerEvents.ERROR, e); + }); + return runner.run(stateProcessor); } }; diff --git a/test/unit/runner/browser-runner/browser-agent.js b/test/unit/runner/browser-runner/browser-agent.js index 7727c31ff..4d1639772 100644 --- a/test/unit/runner/browser-runner/browser-agent.js +++ b/test/unit/runner/browser-runner/browser-agent.js @@ -31,4 +31,21 @@ describe('runner/browser-runner/browser-agent', function() { assert.calledWith(browserPool.freeBrowser, browser); }); + + it('should free browser unconditionally if session was invalidated', () => { + const browserAgent = BrowserAgent.create('browser', browserPool); + + browserAgent.invalidateSession(); + browserAgent.freeBrowser(); + + assert.calledWith(browserPool.freeBrowser, sinon.match.any, {force: true}); + }); + + it('should free browser conditionally if session was not invalidated', () => { + const browserAgent = BrowserAgent.create('browser', browserPool); + + browserAgent.freeBrowser(); + + assert.calledWith(browserPool.freeBrowser, sinon.match.any, {force: false}); + }); }); diff --git a/test/unit/runner/suite-runner/regular-suite-runner.js b/test/unit/runner/suite-runner/regular-suite-runner.js index 694d9b941..a1b1f9968 100644 --- a/test/unit/runner/suite-runner/regular-suite-runner.js +++ b/test/unit/runner/suite-runner/regular-suite-runner.js @@ -8,6 +8,7 @@ const StateRunner = require('lib/runner/state-runner/state-runner'); const CaptureSession = require('lib/capture-session'); const BrowserAgent = require('lib/runner/browser-runner/browser-agent'); const Config = require('lib/config'); +const NoRefImageError = require('lib/errors/no-ref-image-error'); const util = require('../../../util'); const makeSuiteStub = util.makeSuiteStub; @@ -433,6 +434,24 @@ describe('runner/suite-runner/regular-suite-runner', () => { return run_() .fail(() => assert.calledOnce(BrowserAgent.prototype.freeBrowser)); }); + + it('should invalidate session after error in test', () => { + CaptureSession.prototype.runActions.returns(q.reject()); + + return run_() + .catch(() => { + assert.called(BrowserAgent.prototype.invalidateSession); + }); + }); + + it('should not invalidate session after `NoRefImageError`', () => { + CaptureSession.prototype.runActions.returns(q.reject(new NoRefImageError())); + + return run_() + .then(() => { + assert.notCalled(BrowserAgent.prototype.invalidateSession); + }); + }); }); it('should add `browserId` and `sessionId` to error if something failed', () => { From ab3c0d1d4d244ef28a7ee65bb722bfa6227b272e Mon Sep 17 00:00:00 2001 From: Rostislav Shtanko Date: Tue, 30 Aug 2016 16:57:42 +0300 Subject: [PATCH 2/2] to ES6 --- lib/runner/browser-runner/browser-agent.js | 28 ++- .../suite-runner/regular-suite-runner.js | 6 +- .../runner/browser-runner/browser-agent.js | 2 +- test/unit/runner/browser-runner/index.js | 204 ++++++++---------- .../suite-runner/regular-suite-runner.js | 7 +- .../suite-runner/skipped-suite-runner.js | 78 +++---- .../suite-runner/stateless-suite-runner.js | 49 ++--- 7 files changed, 169 insertions(+), 205 deletions(-) diff --git a/lib/runner/browser-runner/browser-agent.js b/lib/runner/browser-runner/browser-agent.js index 9ccc877c8..e806e3907 100644 --- a/lib/runner/browser-runner/browser-agent.js +++ b/lib/runner/browser-runner/browser-agent.js @@ -1,32 +1,28 @@ 'use strict'; -var inherit = require('inherit'); +module.exports = class BrowserAgent { + static create(browserId, pool) { + return new BrowserAgent(browserId, pool); + } -var BrowserAgent = inherit({ - __constructor: function(browserId, pool) { + constructor(browserId, pool) { this.browserId = browserId; this._pool = pool; this._force = false; - }, + } - invalidateSession: function() { + invalidateSession() { this._force = true; - }, + } - getBrowser: function() { + getBrowser() { return this._pool.getBrowser(this.browserId); - }, + } - freeBrowser: function(browser, opts) { + freeBrowser(browser, opts) { opts = opts || {}; opts.force = this._force; return this._pool.freeBrowser(browser, opts); } -}, { - create: function(browserId, pool) { - return new BrowserAgent(browserId, pool); - } -}); - -module.exports = BrowserAgent; +}; diff --git a/lib/runner/suite-runner/regular-suite-runner.js b/lib/runner/suite-runner/regular-suite-runner.js index e45b224ed..d5e967672 100644 --- a/lib/runner/suite-runner/regular-suite-runner.js +++ b/lib/runner/suite-runner/regular-suite-runner.js @@ -27,7 +27,7 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { .then((browser) => this._initSession(browser)) .then(() => this._processStates(stateProcessor)) .catch((e) => { - this._handleError(e); + this._validateSession(e); return this._passErrorToStates(e); }) @@ -92,7 +92,7 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { return promiseUtils.seqMap(this._suite.states, (state) => this._runStateInSession(state, stateProcessor)); } - _handleError(error) { + _validateSession(error) { if (!(error instanceof NoRefImageError)) { this._browserAgent.invalidateSession(); } @@ -112,7 +112,7 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { ]); runner.on(RunnerEvents.ERROR, (e) => { - this._handleError(e); + this._validateSession(e); this.emit(RunnerEvents.ERROR, e); }); diff --git a/test/unit/runner/browser-runner/browser-agent.js b/test/unit/runner/browser-runner/browser-agent.js index 4d1639772..021d4638c 100644 --- a/test/unit/runner/browser-runner/browser-agent.js +++ b/test/unit/runner/browser-runner/browser-agent.js @@ -41,7 +41,7 @@ describe('runner/browser-runner/browser-agent', function() { assert.calledWith(browserPool.freeBrowser, sinon.match.any, {force: true}); }); - it('should free browser conditionally if session was not invalidated', () => { + it('should free browser if session was not invalidated', () => { const browserAgent = BrowserAgent.create('browser', browserPool); browserAgent.freeBrowser(); diff --git a/test/unit/runner/browser-runner/index.js b/test/unit/runner/browser-runner/index.js index ccd95f6a9..104f44fcd 100644 --- a/test/unit/runner/browser-runner/index.js +++ b/test/unit/runner/browser-runner/index.js @@ -1,156 +1,143 @@ 'use strict'; -var q = require('q'), - BrowserRunner = require('lib/runner/browser-runner'), - BrowserAgent = require('lib/runner/browser-runner/browser-agent'), - SuiteRunner = require('lib/runner/suite-runner/suite-runner'), - suiteRunnerFabric = require('lib/runner/suite-runner'), - CancelledError = require('lib/errors/cancelled-error'), - BasicPool = require('lib/browser-pool/basic-pool'), - Config = require('lib/config'), - - makeSuiteStub = require('../../../util').makeSuiteStub; - -describe('runner/BrowserRunner', function() { - var sandbox = sinon.sandbox.create(), - suiteRunner; - - beforeEach(function() { + +const q = require('q'); +const BrowserRunner = require('lib/runner/browser-runner'); +const BrowserAgent = require('lib/runner/browser-runner/browser-agent'); +const SuiteRunner = require('lib/runner/suite-runner/suite-runner'); +const suiteRunnerFabric = require('lib/runner/suite-runner'); +const CancelledError = require('lib/errors/cancelled-error'); +const BasicPool = require('lib/browser-pool/basic-pool'); +const Config = require('lib/config'); + +const makeSuiteStub = require('../../../util').makeSuiteStub; + +describe('runner/BrowserRunner', () => { + const sandbox = sinon.sandbox.create(); + + let suiteRunner; + + beforeEach(() => { suiteRunner = sinon.createStubInstance(SuiteRunner); suiteRunner.run.returns(q.resolve()); sandbox.stub(suiteRunnerFabric, 'create'); suiteRunnerFabric.create.returns(suiteRunner); - - sandbox.stub(BrowserAgent.prototype); }); - afterEach(function() { - sandbox.restore(); - }); + afterEach(() => sandbox.restore()); - function mkRunner_(browser, browserPool) { + const mkRunner_ = (browser, browserPool) => { return BrowserRunner.create( browser || 'default-browser', sinon.createStubInstance(Config), browserPool || sinon.createStubInstance(BasicPool) ); - } + }; - describe('constructor', function() { - it('should create browser agent associated with passed browser id', function() { - var browserPool = sinon.createStubInstance(BasicPool); + describe('constructor', () => { + it('should create browser agent associated with passed browser id', () => { + sandbox.stub(BrowserAgent, 'create'); + const browserPool = sinon.createStubInstance(BasicPool); mkRunner_('browser', browserPool); - assert.calledWith(BrowserAgent.prototype.__constructor, 'browser', browserPool); + assert.calledWith(BrowserAgent.create, 'browser', browserPool); }); }); - describe('run', function() { - it('should emit `startBrowser` event when starting browser', function() { - var onStartBrowser = sinon.spy().named('onStartBrowser'), - runner = mkRunner_('browser'); + describe('run', () => { + it('should emit `startBrowser` event when starting browser', () => { + const onStartBrowser = sinon.spy().named('onStartBrowser'); + const runner = mkRunner_('browser'); + runner.on('startBrowser', onStartBrowser); return runner.run([]) - .then(function() { - assert.calledWith(onStartBrowser, {browserId: 'browser'}); - }); + .then(() => assert.calledWith(onStartBrowser, {browserId: 'browser'})); }); - it('should run only suites expected to be run in current browser', function() { - var someSuite = makeSuiteStub({browsers: ['browser1', 'browser2']}), - suites = [ - someSuite, - makeSuiteStub({browsers: ['browser2']}) - ]; - - var runner = mkRunner_('browser1'); + it('should run only suites expected to be run in current browser', () => { + const someSuite = makeSuiteStub({browsers: ['browser1', 'browser2']}); + const suites = [ + someSuite, + makeSuiteStub({browsers: ['browser2']}) + ]; + const runner = mkRunner_('browser1'); return runner.run(suites) - .then(function() { + .then(() => { assert.calledOnce(suiteRunnerFabric.create); assert.calledWith(suiteRunnerFabric.create, someSuite); }); }); - it('should pass to suite runner browser agent associated with current browser', function() { - var browserAgent = new BrowserAgent('browser'), - suites = [makeSuiteStub({browsers: ['browser']})]; + it('should pass to suite runner browser agent associated with current browser', () => { + const browserAgent = new BrowserAgent('browser'); + const suites = [makeSuiteStub({browsers: ['browser']})]; sandbox.stub(BrowserAgent, 'create'); BrowserAgent.create.returns(browserAgent); - var runner = mkRunner_('browser'); + const runner = mkRunner_('browser'); return runner.run(suites) - .then(function() { - assert.calledWith(suiteRunnerFabric.create, sinon.match.any, browserAgent); - }); + .then(() => assert.calledWith(suiteRunnerFabric.create, sinon.match.any, browserAgent)); }); - it('should passthrough stateProcessor to suite runner', function() { - var suites = [makeSuiteStub({browsers: ['browser']})], - runner = mkRunner_('browser'); + it('should passthrough stateProcessor to suite runner', () => { + const suites = [makeSuiteStub({browsers: ['browser']})]; + const runner = mkRunner_('browser'); return runner.run(suites, 'stateProcessor') - .then(function() { - assert.calledWith(suiteRunner.run, 'stateProcessor'); - }); + .then(() => assert.calledWith(suiteRunner.run, 'stateProcessor')); }); - it('should not run suites after cancel', function() { - var runner = mkRunner_('browser'), - suites = [ - {browsers: ['browser']} - ]; + it('should not run suites after cancel', () => { + const runner = mkRunner_('browser'); + const suites = [{browsers: ['browser']}]; + runner.cancel(); return runner.run(suites) - .then(function() { - assert.notCalled(suiteRunner.run); - }); + .then(() => assert.notCalled(suiteRunner.run)); }); - it('should cancel suite runners on cancel', function() { - var runner = mkRunner_('browser'), - suites = [ - makeSuiteStub({browsers: ['browser']}), - makeSuiteStub({browsers: ['browser']}) - ]; + it('should cancel suite runners on cancel', () => { + const runner = mkRunner_('browser'); + const suites = [ + makeSuiteStub({browsers: ['browser']}), + makeSuiteStub({browsers: ['browser']}) + ]; return runner.run(suites) - .then(function() { + .then(() => { runner.cancel(); assert.calledTwice(suiteRunner.cancel); }); }); - it('should emit `stopBrowser` after all suites', function() { - var onStopBrowser = sinon.spy().named('onStopBrowser'), - runner = mkRunner_('browser'); + it('should emit `stopBrowser` after all suites', () => { + const onStopBrowser = sinon.spy().named('onStopBrowser'); + const runner = mkRunner_('browser'); + runner.on('startBrowser', onStopBrowser); return runner.run([]) - .then(function() { - assert.calledWith(onStopBrowser, {browserId: 'browser'}); - }); + .then(() => assert.calledWith(onStopBrowser, {browserId: 'browser'})); }); - it('should emit events in correct order', function() { - var startBrowser = sinon.spy().named('onStartBrowser'), - stopBrowser = sinon.spy().named('onStopBrowser'), - suites = [ - makeSuiteStub({browsers: ['browser']}) - ]; + it('should emit events in correct order', () => { + const startBrowser = sinon.spy().named('onStartBrowser'); + const stopBrowser = sinon.spy().named('onStopBrowser'); + const suites = [makeSuiteStub({browsers: ['browser']})]; + const runner = mkRunner_('browser'); - var runner = mkRunner_('browser'); runner.on('startBrowser', startBrowser); runner.on('stopBrowser', stopBrowser); return runner.run(suites) - .then(function() { + .then(() => { assert.callOrder( startBrowser, suiteRunner.run, @@ -160,53 +147,44 @@ describe('runner/BrowserRunner', function() { }); }); - describe('critical error', function() { - it('should emit `criticalError` event on error', function() { - var onCriticalError = sinon.spy().named('onCriticalError'), - suites = [ - makeSuiteStub({browsers: ['browser']}) - ]; + describe('critical error', () => { + it('should emit `criticalError` event on error', () => { + const onCriticalError = sinon.spy().named('onCriticalError'); + const suites = [makeSuiteStub({browsers: ['browser']})]; + const runner = mkRunner_('browser'); - var runner = mkRunner_('browser'); runner.on('criticalError', onCriticalError); suiteRunner.run.onFirstCall().returns(q.reject(new Error('error'))); return runner.run(suites) - .then(function() { - assert.calledOnce(onCriticalError); - }); + .then(() => assert.calledOnce(onCriticalError)); }); - it('should not emit `criticalError` if it was manually stopped', function() { - var onCriticalError = sinon.spy().named('onCriticalError'), - suites = [ - makeSuiteStub() - ], - runner = mkRunner_(); + it('should not emit `criticalError` if it was manually stopped', () => { + const onCriticalError = sinon.spy().named('onCriticalError'); + const suites = [makeSuiteStub()]; + const runner = mkRunner_(); runner.on('criticalError', onCriticalError); suiteRunner.run.onFirstCall().returns(q.reject(new CancelledError())); return runner.run(suites) - .then(function() { - assert.notCalled(onCriticalError); - }); + .then(() => assert.notCalled(onCriticalError)); }); - it('should pass suite and browser id as critical error event data', function() { - var onCriticalError = sinon.spy().named('onCriticalError'), - suite = makeSuiteStub({browsers: ['browser']}), - suites = [ - suite - ], - runner = mkRunner_('browser'); + it('should pass suite and browser id as critical error event data', () => { + const onCriticalError = sinon.spy().named('onCriticalError'); + const suite = makeSuiteStub({browsers: ['browser']}); + const suites = [suite]; + const runner = mkRunner_('browser'); runner.on('criticalError', onCriticalError); suiteRunner.run.onFirstCall().returns(q.reject(new Error('error'))); return runner.run(suites) - .then(function() { - var err = onCriticalError.firstCall.args[0]; + .then(() => { + const err = onCriticalError.firstCall.args[0]; + assert.equal(suite, err.suite); assert.equal('browser', err.browserId); }); diff --git a/test/unit/runner/suite-runner/regular-suite-runner.js b/test/unit/runner/suite-runner/regular-suite-runner.js index a1b1f9968..5bb68defe 100644 --- a/test/unit/runner/suite-runner/regular-suite-runner.js +++ b/test/unit/runner/suite-runner/regular-suite-runner.js @@ -26,7 +26,10 @@ describe('runner/suite-runner/regular-suite-runner', () => { sandbox.stub(browser, 'openRelative'); browser.openRelative.returns(q.resolve()); - sandbox.stub(BrowserAgent.prototype); + sandbox.stub(BrowserAgent.prototype, 'getBrowser'); + sandbox.stub(BrowserAgent.prototype, 'freeBrowser'); + sandbox.stub(BrowserAgent.prototype, 'invalidateSession'); + BrowserAgent.prototype.getBrowser.returns(q.resolve(browser)); BrowserAgent.prototype.freeBrowser.returns(q.resolve()); @@ -444,7 +447,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { }); }); - it('should not invalidate session after `NoRefImageError`', () => { + it('should not invalidate session if reference image does not exist', () => { CaptureSession.prototype.runActions.returns(q.reject(new NoRefImageError())); return run_() diff --git a/test/unit/runner/suite-runner/skipped-suite-runner.js b/test/unit/runner/suite-runner/skipped-suite-runner.js index fa7eebd4b..586f46e56 100644 --- a/test/unit/runner/suite-runner/skipped-suite-runner.js +++ b/test/unit/runner/suite-runner/skipped-suite-runner.js @@ -1,73 +1,67 @@ 'use strict'; -var BrowserAgent = require('lib/runner/browser-runner/browser-agent'), - SkippedSuiteRunner = require('lib/runner/suite-runner/skipped-suite-runner'), - util = require('../../../util'); +const BrowserAgent = require('lib/runner/browser-runner/browser-agent'); +const SkippedSuiteRunner = require('lib/runner/suite-runner/skipped-suite-runner'); +const util = require('../../../util'); -describe('runner/suite-runner/skipped-suite-runner', function() { - var sandbox = sinon.sandbox.create(), - runner; +describe('runner/suite-runner/skipped-suite-runner', () => { + const sandbox = sinon.sandbox.create(); - function mkRunner_(suite, browserId) { + let runner; + + const mkRunner_ = (suite, browserId) => { suite = suite || util.makeSuiteStub(); - var browserAgent = new BrowserAgent(); + const browserAgent = new BrowserAgent(); browserAgent.browserId = browserId || 'default-browser'; return new SkippedSuiteRunner(suite, browserAgent); - } + }; - beforeEach(function() { - sandbox.stub(BrowserAgent.prototype); + beforeEach(() => { + sandbox.stub(BrowserAgent.prototype, 'getBrowser'); + sandbox.stub(BrowserAgent.prototype, 'freeBrowser'); runner = mkRunner_(); }); - afterEach(function() { - sandbox.restore(); - }); + afterEach(() => sandbox.restore()); - it('should emit `beginSuite` event', function() { - var onBeginSuite = sinon.spy().named('onBeginSuite'); + it('should emit `beginSuite` event', () => { + const onBeginSuite = sinon.spy().named('onBeginSuite'); runner.on('beginSuite', onBeginSuite); return runner.run() - .then(function() { - assert.calledOnce(onBeginSuite); - }); + .then(() => assert.calledOnce(onBeginSuite)); }); - it('should emit `endSuite` event', function() { - var onEndSuite = sinon.spy().named('onEndSuite'); + it('should emit `endSuite` event', () => { + const onEndSuite = sinon.spy().named('onEndSuite'); runner.on('endSuite', onEndSuite); return runner.run() - .then(function() { - assert.calledOnce(onEndSuite); - }); + .then(() => assert.calledOnce(onEndSuite)); }); - it('should not get/free browser on run', function() { + it('should not get/free browser on run', () => { return runner.run() - .then(function() { + .then(() => { assert.notCalled(BrowserAgent.prototype.getBrowser); assert.notCalled(BrowserAgent.prototype.freeBrowser); }); }); - it('should emit `skipState` for suite state', function() { - var state = util.makeStateStub(), - suite = util.makeSuiteStub({ - states: [state] - }), - onSkipState = sinon.spy().named('onSkipState'), - runner = mkRunner_(suite, 'some-browser'); + it('should emit `skipState` for suite state', () => { + const state = util.makeStateStub(); + const suite = util.makeSuiteStub({states: [state]}); + const onSkipState = sinon.spy().named('onSkipState'); + const runner = mkRunner_(suite, 'some-browser'); runner.on('skipState', onSkipState); return runner.run() - .then(function() { + .then(() => { assert.calledWith(onSkipState, { suite: suite, state: state, @@ -76,18 +70,16 @@ describe('runner/suite-runner/skipped-suite-runner', function() { }); }); - it('should emit `skipState` for each suite state', function() { - var suite = util.makeSuiteStub({ - states: [util.makeStateStub(), util.makeStateStub()] - }), - onSkipState = sinon.spy().named('onSkipState'), - runner = mkRunner_(suite); + it('should emit `skipState` for each suite state', () => { + const suite = util.makeSuiteStub({ + states: [util.makeStateStub(), util.makeStateStub()] + }); + const onSkipState = sinon.spy().named('onSkipState'); + const runner = mkRunner_(suite); runner.on('skipState', onSkipState); return runner.run() - .then(function() { - assert.calledTwice(onSkipState); - }); + .then(() => assert.calledTwice(onSkipState)); }); }); diff --git a/test/unit/runner/suite-runner/stateless-suite-runner.js b/test/unit/runner/suite-runner/stateless-suite-runner.js index 3f007e5c0..144df61ef 100644 --- a/test/unit/runner/suite-runner/stateless-suite-runner.js +++ b/test/unit/runner/suite-runner/stateless-suite-runner.js @@ -1,48 +1,43 @@ 'use strict'; -var BrowserAgent = require('lib/runner/browser-runner/browser-agent'), - StatelessSuiteRunner = require('lib/runner/suite-runner/stateless-suite-runner'), - util = require('../../../util'); - -describe('runner/suite-runner/stateless-suite-runner', function() { - var sandbox = sinon.sandbox.create(), - suite = util.makeSuiteStub(), - browserAgent = new BrowserAgent('default-browser'), - runner = new StatelessSuiteRunner(suite, browserAgent); - - beforeEach(function() { - sandbox.stub(BrowserAgent.prototype); +const BrowserAgent = require('lib/runner/browser-runner/browser-agent'); +const StatelessSuiteRunner = require('lib/runner/suite-runner/stateless-suite-runner'); +const util = require('../../../util'); + +describe('runner/suite-runner/stateless-suite-runner', () => { + const sandbox = sinon.sandbox.create(); + const suite = util.makeSuiteStub(); + const browserAgent = new BrowserAgent('default-browser'); + const runner = new StatelessSuiteRunner(suite, browserAgent); + + beforeEach(() => { + sandbox.stub(BrowserAgent.prototype, 'getBrowser'); + sandbox.stub(BrowserAgent.prototype, 'freeBrowser'); }); - afterEach(function() { - sandbox.restore(); - }); + afterEach(() => sandbox.restore()); - it('should emit `beginSuite` event', function() { - var onBeginSuite = sinon.spy().named('onBeginSuite'); + it('should emit `beginSuite` event', () => { + const onBeginSuite = sinon.spy().named('onBeginSuite'); runner.on('beginSuite', onBeginSuite); return runner.run() - .then(function() { - assert.calledOnce(onBeginSuite); - }); + .then(() => assert.calledOnce(onBeginSuite)); }); - it('should emit `endSuite` event', function() { - var onEndSuite = sinon.spy().named('onEndSuite'); + it('should emit `endSuite` event', () => { + const onEndSuite = sinon.spy().named('onEndSuite'); runner.on('endSuite', onEndSuite); return runner.run() - .then(function() { - assert.calledOnce(onEndSuite); - }); + .then(() => assert.calledOnce(onEndSuite)); }); - it('should not get/free browser on run', function() { + it('should not get/free browser on run', () => { return runner.run() - .then(function() { + .then(() => { assert.notCalled(BrowserAgent.prototype.getBrowser); assert.notCalled(BrowserAgent.prototype.freeBrowser); });