From 9d446b7bab53f15295b6ffcfe38639ce47109db9 Mon Sep 17 00:00:00 2001 From: brine Date: Thu, 24 Aug 2017 09:36:30 -0500 Subject: [PATCH] fix: add unit test for jasmine-spec-reporter, and associated accoutrements --- package.json | 3 +- .../jasmine-spec-reporter.conf.js | 51 +++++++++++++++++++ test/unit/index.test.js | 10 ++++ ...iled-jasmine-spec-reporter-test-output.txt | 32 ++++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 test/integration/support/protractor-config/jasmine-spec-reporter.conf.js create mode 100644 test/unit/support/fixtures/failed-jasmine-spec-reporter-test-output.txt diff --git a/package.json b/package.json index 2dfcfc3..6d04c0b 100644 --- a/package.json +++ b/package.json @@ -37,10 +37,11 @@ "cookie-parser": "^1.3.5", "express": "^4.13.1", "express-session": "^1.11.3", + "jasmine-spec-reporter": "^4.2.1", "mocha": "^2.2.5", "morgan": "^1.6.1", "mversion": "^1.10.0", - "protractor": "^4.0.11", + "protractor": "^5.1.2", "proxyquire": "^1.6.0", "semantic-release": "^6.3.6", "sinon": "^1.15.4", diff --git a/test/integration/support/protractor-config/jasmine-spec-reporter.conf.js b/test/integration/support/protractor-config/jasmine-spec-reporter.conf.js new file mode 100644 index 0000000..ad95acc --- /dev/null +++ b/test/integration/support/protractor-config/jasmine-spec-reporter.conf.js @@ -0,0 +1,51 @@ +'use strict'; + +var JOB_NUMBER = (process.env.TRAVIS_JOB_NUMBER || '') +var JOB_NAME = 'Flake' + JOB_NUMBER + +exports.config = { + specs: [ + '../flakey-test.js', + '../passing-test.js' + ], + + capabilities: { + browserName: 'chrome', + name: JOB_NAME, + shardTestFiles: false, + maxInstances: 2, + 'tunnel-identifier': JOB_NUMBER + }, + + sauceUser: process.env.SAUCE_USERNAME, + sauceKey: process.env.SAUCE_ACCESS_KEY, + + baseUrl: 'http://localhost:3000/', + + framework: 'jasmine2', + + allScriptsTimeout: 10000, + + getPageTimeout: 3000, + + jasmineNodeOpts: { + defaultTimeoutInterval: 5000, + print: function() {} // remove dot reporter + }, + + onPrepare: function () { + // let protractor know it doesn't need to look for angular on the page + browser.ignoreSynchronization = true; + + // make reports mo' pretty + var SpecReporter = require('jasmine-spec-reporter').SpecReporter; + jasmine.getEnv().addReporter( + new SpecReporter({ + spec: { + displayStacktrace: true + } + }) + ); + } +}; + diff --git a/test/unit/index.test.js b/test/unit/index.test.js index 016c840..332cae6 100644 --- a/test/unit/index.test.js +++ b/test/unit/index.test.js @@ -5,6 +5,7 @@ import parseOptions from '../../src/parse-options' const failedSingleTestOutput = readFixture('failed-test-output.txt') const failedShardedTestOutput = readFixture('sharded-failed-test-output.txt') +const failedJasmineSpecReporterTestOutput = readFixture('failed-jasmine-spec-reporter-test-output.txt') describe('Protractor Flake', () => { let spawnStub = null @@ -93,6 +94,15 @@ describe('Protractor Flake', () => { expect(spawnStub).to.have.been.calledWith('node', [pathToProtractor(), '--params.flake.retry', true, '--specs', '/tests/a-flakey.test.js']) }) + it('isolates individual failed specs from jasmine-spec-reporter output', () => { + protractorFlake({maxAttempts: 3}) + + spawnStub.dataCallback(failedJasmineSpecReporterTestOutput) + spawnStub.endCallback(1) + + expect(spawnStub).to.have.been.calledWith('node', [pathToProtractor(), '--params.flake.retry', true, '--specs', '/tests/flakey.test.js']) + }) + it('isolates failed specs for sharded protractor output', () => { protractorFlake({maxAttempts: 3}) diff --git a/test/unit/support/fixtures/failed-jasmine-spec-reporter-test-output.txt b/test/unit/support/fixtures/failed-jasmine-spec-reporter-test-output.txt new file mode 100644 index 0000000..d835c54 --- /dev/null +++ b/test/unit/support/fixtures/failed-jasmine-spec-reporter-test-output.txt @@ -0,0 +1,32 @@ +[08:04:24] I/launcher - Running 1 instances of WebDriver +[08:04:24] I/direct - Using ChromeDriver directly... +Jasmine started + + a flakey integration test + ✗ fails, in a horribly consistent manner + - Expected false to be truthy. + at UserContext. (/tests/flakey.test.js:7:39) + at node_modules/jasminewd2/index.js:112:25 + at new ManagedPromise (node_modules/selenium-webdriver/lib/promise.js:1067:7) + at ControlFlow.promise (node_modules/selenium-webdriver/lib/promise.js:2396:12) + at schedulerExecute (node_modules/jasminewd2/index.js:95:18) + at TaskQueue.execute_ (node_modules/selenium-webdriver/lib/promise.js:2970:14) + at TaskQueue.executeNext_ (node_modules/selenium-webdriver/lib/promise.js:2953:27) + at asyncRun (node_modules/selenium-webdriver/lib/promise.js:2813:27) + at node_modules/selenium-webdriver/lib/promise.js:676:7 + + A test that passes + ✓ passes + +************************************************** +* Failures * +************************************************** + +1) a flakey integration test fails, in a horribly consistent manner + - Expected false to be truthy. + +Executed 2 of 2 specs (1 FAILED) in 0.742 sec. +[08:04:26] I/launcher - 0 instance(s) of WebDriver still running +[08:04:26] I/launcher - chrome #01 failed 1 test(s) +[08:04:26] I/launcher - overall: 1 failed spec(s) +[08:04:26] E/launcher - Process exited with error code 1 \ No newline at end of file