From b8195ce9601c78161e2eba34a3362f7795e110a8 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Sun, 11 Oct 2015 07:09:59 -0700 Subject: [PATCH 01/21] Add travis keys and sauce, coveralls badges. --- .travis.yml | 5 +++++ README.md | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/.travis.yml b/.travis.yml index 196e306..4ba4e11 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,11 @@ before_script: # Install dev. stuff (e.g., selenium drivers). - npm run install-dev +env: + global: + - secure: VbnGQuWiljZSw9DrscOL3/eph86TmD5LulP/AhASVzcUB2xZcuK2U4E8OcuY+fMcOcwoNpKqO/e+QIvecr8JwurXKnbr0Hua6EeO/vEOiNTD/l4NmSDqPR4B9y01oARRJW2S+MlDNx5QI7W3tSOiV1wjWtS2RhvsAIPO3kurzUJXU9Yc+sUl8/KoAOflKDJVYgQN1yEHHCBnOs+qHyI7YyN66YTxK51rfvHBV8C14fUqkOjjDJtDoi7y6GgSL8BDTJRf/MNaGE3jJFZEFLxCLbAiuSnwT5nRhr/gGRbmiE2IQcwgTPm8Kul+TBqjwimnHqBGaMNRvkRFG7OmcYI5yXvjY/l+VkCk3etkXIsFLu9CppyflBOKb0G2IkAOBmOgB6/HpQJgOrImxNQ3zn5/xCoKzLexVuCzoIETq7DSFzraxoKGtMOJQTz5rZRdj9RgY2NGHiVjuBiePcuKgFTBfjTHNvVzNayo/kqDHJmw1QNkRsqOIi8uyo22o1N2wILXier4xjT4f5MspEnFNQOt2IGDt/loxh8xWsi4ltetFybBF7y/anVrkD1JqJsg5nrsV/VQsxE1ryfrr7FkJATqq4KYdrH7NrZxYzH5HF4Q/g1zu4ob/EaKrJsUVXiZ6loDsG4K8AblHysSw/Fo77qRog/zcUttYgyAeSRnSy4Nz7o= + - secure: nbbv8GSe/u7Flq/LNfyg4aJAPWz/xHEBt6yharCaSSDkBjG6FIy9HDefFAAVSlauqzD19xlvanGP7J9yN3yzfE2pdpDkUoYFcIRbq+iYj7p19ne3BfaozDbq/XVqVIOG20TGza0Nn5bjCx906QGy9zaG6qo9pJOjFM/+VlXO3VPGnwRuENXwPQm/1bc213kZ2GsbsRxdZLDOcz/uo1bWpOKvf6nnuxX1/rfDO/u+/ioFxGqvE8h1fsyMYDW5rX9fwKor+XwSHc4ktAuf/VcMIGvZ6KepjqkL/+GukM4I756PX3egl4BQvP1i5pQbWzHnIX+Sl1bKdc+P0e0m7oyXwTB3EupwAtJFjKi0Gbthid4UVJxLh7LhBvj/6V4H+bvMRwx0KI4jm+/p1finAbfST/JN6iYasAGEGCNUZHRQHYNviGGN7eVXbVaArsVAMLenEUJ/TRHaN7M9qV479tFeIyWRtUf7xuujj4aIwMxhG6a5SP3feWh6gZuCgZz/eaidASlE/OBdTg5uk4ye0IRtdK5D7zJC3vG3S7w4IFiBHmgRKz0fRpqVlx7JOj3whIb9P6qcWwuzS49pnFkGHsD/e4pW3E/0f+C89ZjDFSZX42rA7wgw0p3kftQGHn9ySalV2T0rne/em86ZyyQiDTvFRubhp35epC3gI3cv1EK1ouk= + script: # Run all base checks (with FF browser for functional tests). - npm run check-ci diff --git a/README.md b/README.md index d35f6ad..ce326f5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ [![Travis Status][trav_img]][trav_site] +[![Coverage Status][cov_img]][cov_site] +[![Sauce Test Status][sauce_img]][sauce_site] RequirePack =========== @@ -53,3 +55,9 @@ Ports various servers run on: [rjs-exclude]: https://github.com/jrburke/r.js/blob/master/build/example.build.js#L388-L398 [trav_img]: https://api.travis-ci.org/FormidableLabs/requirepack.svg [trav_site]: https://travis-ci.org/FormidableLabs/requirepack +[sauce]: https://saucelabs.com +[sauce_img]: https://saucelabs.com/browser-matrix/requirepack.svg +[sauce_site]: https://saucelabs.com/u/requirepack +[cov]: https://coveralls.io +[cov_img]: https://img.shields.io/coveralls/FormidableLabs/requirepack.svg +[cov_site]: https://coveralls.io/r/FormidableLabs/requirepack From f010c076963bc472733fcf6d41b50a43718e1f3a Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 12 Oct 2015 07:56:55 -0700 Subject: [PATCH 02/21] Bump rowdy --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 11836bf..a73e3bd 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "phantomjs": "^1.9.18", "require-handlebars-plugin": "^1.0.0", "requirejs": "^2.1.20", - "rowdy": "^0.3.2", + "rowdy": "^0.3.3", "saucelabs": "^1.0.1", "selenium-standalone": "^4.6.3", "sinon": "^1.17.1", From 2ddded400d00ba85718048910dc96e076db3e01c Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Wed, 14 Oct 2015 11:48:19 -0700 Subject: [PATCH 03/21] More sauce connect work. --- package.json | 1 + test/func/mocha.opts | 2 +- test/func/spec/base.spec.js | 43 ++++++++++++++++++++++++++++++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a73e3bd..795952b 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "require-handlebars-plugin": "^1.0.0", "requirejs": "^2.1.20", "rowdy": "^0.3.3", + "sauce-connect-launcher": "^0.13.0", "saucelabs": "^1.0.1", "selenium-standalone": "^4.6.3", "sinon": "^1.17.1", diff --git a/test/func/mocha.opts b/test/func/mocha.opts index 633620d..33ce560 100644 --- a/test/func/mocha.opts +++ b/test/func/mocha.opts @@ -1,3 +1,3 @@ --require test/func/setup.js --recursive ---timeout 10000 +--timeout 15000 diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index accf51e..c110044 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -9,16 +9,57 @@ // Set test environment process.env.NODE_ENV = process.env.NODE_ENV || "test-func"; +// ---------------------------------------------------------------------------- +// Sauce Connect Tunnel +// ---------------------------------------------------------------------------- +var rowdy = require("rowdy"); +var isSauceLabs = rowdy.config.setting.isSauceLabs; + +if (isSauceLabs) { + var connect = require("sauce-connect-launcher"); + var connectPs; + + before(function (done) { + // SC takes a **long** time. + this.timeout(60000); + + connect({ + username: rowdy.config.setting.host, + accessKey: rowdy.config.setting.key, + verbose: true + }, function (err, ps) { + if (err) { return done(err); } + // Stash process. + connectPs = ps; + + // Patch settings + //obj.desiredCapabilities.tunnelIdentifier = + + done(); + }); + }); + + after(function (done) { + if (connectPs) { + this.timeout(30000); + return connectPs.close(done); + } + + done(); + }); +} + // ---------------------------------------------------------------------------- // Selenium (Webdriverio/Rowdy) initialization // ---------------------------------------------------------------------------- // **Note** Can stash adapter, but not `adapter.client` because it is a lazy // getter that relies on the global `before|beforeEach` setup. var adapter = global.adapter; -var ELEM_WAIT = 500; // Global wait. +var ELEM_WAIT = isSauceLabs ? 2000 : 500; // Global wait. adapter.before(); before(function (done) { + if (isSauceLabs) { this.timeout(20000); } adapter.client // Set timeout for waiting on elements. .timeoutsImplicitWait(ELEM_WAIT) From dcc699efdec37e8681c184339e212dfdc8e290b8 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 09:51:00 -0700 Subject: [PATCH 04/21] Lots of sauce labs wrangling. Add error dumps to test pages, etc. --- test/func/complex-amd/spec/application.spec.js | 2 +- test/func/handlebars-amd/spec/application.spec.js | 2 +- test/func/mocha.opts | 2 +- test/func/simple-amd/spec/application.spec.js | 2 +- test/func/spec/base.spec.js | 4 ++-- test/util/build.js | 14 +++++++++++++- test/util/templates.js | 15 ++++++++++++++- 7 files changed, 33 insertions(+), 8 deletions(-) diff --git a/test/func/complex-amd/spec/application.spec.js b/test/func/complex-amd/spec/application.spec.js index fe59640..e606a9c 100644 --- a/test/func/complex-amd/spec/application.spec.js +++ b/test/func/complex-amd/spec/application.spec.js @@ -5,7 +5,7 @@ var promiseDone = require("../../../util/promise-done"); var build = require("../build"); describe(build.scenario, function () { - Object.keys(build.PAGES).forEach(function (page) { + build.getTestPages().forEach(function (page) { it(page, function (done) { var url = global.TEST_FUNC_BASE_URL + path.join(build.scenario, "dist", page); diff --git a/test/func/handlebars-amd/spec/application.spec.js b/test/func/handlebars-amd/spec/application.spec.js index 1eec113..82516fd 100644 --- a/test/func/handlebars-amd/spec/application.spec.js +++ b/test/func/handlebars-amd/spec/application.spec.js @@ -5,7 +5,7 @@ var promiseDone = require("../../../util/promise-done"); var build = require("../build"); describe(build.scenario, function () { - Object.keys(build.PAGES).forEach(function (page) { + build.getTestPages().forEach(function (page) { it(page, function (done) { var url = global.TEST_FUNC_BASE_URL + path.join(build.scenario, "dist", page); diff --git a/test/func/mocha.opts b/test/func/mocha.opts index 33ce560..019bc6f 100644 --- a/test/func/mocha.opts +++ b/test/func/mocha.opts @@ -1,3 +1,3 @@ --require test/func/setup.js --recursive ---timeout 15000 +--timeout 25000 diff --git a/test/func/simple-amd/spec/application.spec.js b/test/func/simple-amd/spec/application.spec.js index 1eec113..82516fd 100644 --- a/test/func/simple-amd/spec/application.spec.js +++ b/test/func/simple-amd/spec/application.spec.js @@ -5,7 +5,7 @@ var promiseDone = require("../../../util/promise-done"); var build = require("../build"); describe(build.scenario, function () { - Object.keys(build.PAGES).forEach(function (page) { + build.getTestPages().forEach(function (page) { it(page, function (done) { var url = global.TEST_FUNC_BASE_URL + path.join(build.scenario, "dist", page); diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index c110044..b5aef8b 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -1,5 +1,5 @@ "use strict"; -/*eslint-disable max-statements*/ +/*eslint-disable max-statements, no-invalid-this */ /** * Base server unit test initialization / global before/after's. @@ -55,7 +55,7 @@ if (isSauceLabs) { // **Note** Can stash adapter, but not `adapter.client` because it is a lazy // getter that relies on the global `before|beforeEach` setup. var adapter = global.adapter; -var ELEM_WAIT = isSauceLabs ? 2000 : 500; // Global wait. +var ELEM_WAIT = isSauceLabs ? 5000 : 500; // Global wait. adapter.before(); before(function (done) { diff --git a/test/util/build.js b/test/util/build.js index 38bc81c..3b5b948 100644 --- a/test/util/build.js +++ b/test/util/build.js @@ -54,7 +54,8 @@ Build.prototype.PAGES = { { src: "../requirejs.config.js" }, function () { require.config({ - baseUrl: "../src" + baseUrl: "../src", + waitSeconds: 0 }); require(["lib"], function () { require(["app1", "app2"]); @@ -115,6 +116,17 @@ Build.prototype.PAGES = { ] }; +// Provide pages to test. +Build.prototype.getTestPages = function () { + var isSauceLabs = require("rowdy").config.setting.isSauceLabs; + + return _(this.PAGES) + .keys() + // We do not test RJS in dev mode on Sauce because the latency just kills everything. + .filter(function (page) { return !isSauceLabs || page !== "requirejs-baseline-dev.html"; }) + .value(); +}; + // Helpers Build.prototype._writeHtml = function (destPath, scripts, callback) { var dest = path.join(this.destDir, destPath); diff --git a/test/util/templates.js b/test/util/templates.js index ba339a5..b43bd3e 100644 --- a/test/util/templates.js +++ b/test/util/templates.js @@ -21,7 +21,20 @@ module.exports = { " Demo", " ", " ", - "
" + "
", + "
", + " " ], (scripts || []).map(function (script) { // Strings are treated as inline functions to wrap in a closure. From 104d045d935c68569d04386d081b21861d975e1e Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 10:45:46 -0700 Subject: [PATCH 05/21] Shoring up the ie8 bug (hbs plugin). --- package.json | 2 +- test/func/complex-amd/spec/application.spec.js | 5 +++++ test/func/handlebars-amd/spec/application.spec.js | 5 +++++ test/func/simple-amd/spec/application.spec.js | 5 +++++ test/util/build.js | 8 +------- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 1145e2d..034f3c5 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "jquery": "^1.11.3", "mocha": "^2.3.3", "phantomjs": "^1.9.18", - "require-handlebars-plugin": "^1.0.0", + "require-handlebars-plugin": "FormidableLabs/require-handlebars-plugin#bug-ie8-forEach", "requirejs": "^2.1.20", "rowdy": "^0.3.3", "sauce-connect-launcher": "^0.13.0", diff --git a/test/func/complex-amd/spec/application.spec.js b/test/func/complex-amd/spec/application.spec.js index e606a9c..8185eba 100644 --- a/test/func/complex-amd/spec/application.spec.js +++ b/test/func/complex-amd/spec/application.spec.js @@ -12,6 +12,11 @@ describe(build.scenario, function () { global.adapter.client .url(url) + // Check errors + .getText("#error").then(function (text) { + expect(text).to.not.be.ok; + }) + // Check headings .getText("#app1").then(function (text) { expect(text).to.equal("App 1"); diff --git a/test/func/handlebars-amd/spec/application.spec.js b/test/func/handlebars-amd/spec/application.spec.js index 82516fd..0de34e3 100644 --- a/test/func/handlebars-amd/spec/application.spec.js +++ b/test/func/handlebars-amd/spec/application.spec.js @@ -12,6 +12,11 @@ describe(build.scenario, function () { global.adapter.client .url(url) + // Check errors + .getText("#error").then(function (text) { + expect(text).to.not.be.ok; + }) + // Check headings .getText("#app1").then(function (text) { expect(text).to.equal("App 1"); diff --git a/test/func/simple-amd/spec/application.spec.js b/test/func/simple-amd/spec/application.spec.js index 82516fd..0de34e3 100644 --- a/test/func/simple-amd/spec/application.spec.js +++ b/test/func/simple-amd/spec/application.spec.js @@ -12,6 +12,11 @@ describe(build.scenario, function () { global.adapter.client .url(url) + // Check errors + .getText("#error").then(function (text) { + expect(text).to.not.be.ok; + }) + // Check headings .getText("#app1").then(function (text) { expect(text).to.equal("App 1"); diff --git a/test/util/build.js b/test/util/build.js index 3b5b948..2346ccf 100644 --- a/test/util/build.js +++ b/test/util/build.js @@ -118,13 +118,7 @@ Build.prototype.PAGES = { // Provide pages to test. Build.prototype.getTestPages = function () { - var isSauceLabs = require("rowdy").config.setting.isSauceLabs; - - return _(this.PAGES) - .keys() - // We do not test RJS in dev mode on Sauce because the latency just kills everything. - .filter(function (page) { return !isSauceLabs || page !== "requirejs-baseline-dev.html"; }) - .value(); + return _.keys(this.PAGES); }; // Helpers From 5c5e9b592523a0bba241e41e1c77acfadfcd4155 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 10:53:21 -0700 Subject: [PATCH 06/21] Do additional build in func tests for coverage. --- test/func/complex-amd/spec/application.spec.js | 5 +++++ test/func/handlebars-amd/spec/application.spec.js | 5 +++++ test/func/simple-amd/spec/application.spec.js | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/test/func/complex-amd/spec/application.spec.js b/test/func/complex-amd/spec/application.spec.js index 8185eba..35e2bc3 100644 --- a/test/func/complex-amd/spec/application.spec.js +++ b/test/func/complex-amd/spec/application.spec.js @@ -5,6 +5,11 @@ var promiseDone = require("../../../util/promise-done"); var build = require("../build"); describe(build.scenario, function () { + // Extra build to force coverage. + before(function (done) { + build.buildRequirePack(done); + }); + build.getTestPages().forEach(function (page) { it(page, function (done) { var url = global.TEST_FUNC_BASE_URL + path.join(build.scenario, "dist", page); diff --git a/test/func/handlebars-amd/spec/application.spec.js b/test/func/handlebars-amd/spec/application.spec.js index 0de34e3..e54222f 100644 --- a/test/func/handlebars-amd/spec/application.spec.js +++ b/test/func/handlebars-amd/spec/application.spec.js @@ -5,6 +5,11 @@ var promiseDone = require("../../../util/promise-done"); var build = require("../build"); describe(build.scenario, function () { + // Extra build to force coverage. + before(function (done) { + build.buildRequirePack(done); + }); + build.getTestPages().forEach(function (page) { it(page, function (done) { var url = global.TEST_FUNC_BASE_URL + path.join(build.scenario, "dist", page); diff --git a/test/func/simple-amd/spec/application.spec.js b/test/func/simple-amd/spec/application.spec.js index 0de34e3..e54222f 100644 --- a/test/func/simple-amd/spec/application.spec.js +++ b/test/func/simple-amd/spec/application.spec.js @@ -5,6 +5,11 @@ var promiseDone = require("../../../util/promise-done"); var build = require("../build"); describe(build.scenario, function () { + // Extra build to force coverage. + before(function (done) { + build.buildRequirePack(done); + }); + build.getTestPages().forEach(function (page) { it(page, function (done) { var url = global.TEST_FUNC_BASE_URL + path.join(build.scenario, "dist", page); From bdd55c4f7ee701e90c056c220901e24f5948b3d4 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 11:30:44 -0700 Subject: [PATCH 07/21] Hook up full travis with sc coming from Travis. --- .travis.yml | 16 ++++++++++++++-- test/func/spec/base.spec.js | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4ba4e11..1b4a9b6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,13 +22,25 @@ before_script: env: global: - - secure: VbnGQuWiljZSw9DrscOL3/eph86TmD5LulP/AhASVzcUB2xZcuK2U4E8OcuY+fMcOcwoNpKqO/e+QIvecr8JwurXKnbr0Hua6EeO/vEOiNTD/l4NmSDqPR4B9y01oARRJW2S+MlDNx5QI7W3tSOiV1wjWtS2RhvsAIPO3kurzUJXU9Yc+sUl8/KoAOflKDJVYgQN1yEHHCBnOs+qHyI7YyN66YTxK51rfvHBV8C14fUqkOjjDJtDoi7y6GgSL8BDTJRf/MNaGE3jJFZEFLxCLbAiuSnwT5nRhr/gGRbmiE2IQcwgTPm8Kul+TBqjwimnHqBGaMNRvkRFG7OmcYI5yXvjY/l+VkCk3etkXIsFLu9CppyflBOKb0G2IkAOBmOgB6/HpQJgOrImxNQ3zn5/xCoKzLexVuCzoIETq7DSFzraxoKGtMOJQTz5rZRdj9RgY2NGHiVjuBiePcuKgFTBfjTHNvVzNayo/kqDHJmw1QNkRsqOIi8uyo22o1N2wILXier4xjT4f5MspEnFNQOt2IGDt/loxh8xWsi4ltetFybBF7y/anVrkD1JqJsg5nrsV/VQsxE1ryfrr7FkJATqq4KYdrH7NrZxYzH5HF4Q/g1zu4ob/EaKrJsUVXiZ6loDsG4K8AblHysSw/Fo77qRog/zcUttYgyAeSRnSy4Nz7o= - - secure: nbbv8GSe/u7Flq/LNfyg4aJAPWz/xHEBt6yharCaSSDkBjG6FIy9HDefFAAVSlauqzD19xlvanGP7J9yN3yzfE2pdpDkUoYFcIRbq+iYj7p19ne3BfaozDbq/XVqVIOG20TGza0Nn5bjCx906QGy9zaG6qo9pJOjFM/+VlXO3VPGnwRuENXwPQm/1bc213kZ2GsbsRxdZLDOcz/uo1bWpOKvf6nnuxX1/rfDO/u+/ioFxGqvE8h1fsyMYDW5rX9fwKor+XwSHc4ktAuf/VcMIGvZ6KepjqkL/+GukM4I756PX3egl4BQvP1i5pQbWzHnIX+Sl1bKdc+P0e0m7oyXwTB3EupwAtJFjKi0Gbthid4UVJxLh7LhBvj/6V4H+bvMRwx0KI4jm+/p1finAbfST/JN6iYasAGEGCNUZHRQHYNviGGN7eVXbVaArsVAMLenEUJ/TRHaN7M9qV479tFeIyWRtUf7xuujj4aIwMxhG6a5SP3feWh6gZuCgZz/eaidASlE/OBdTg5uk4ye0IRtdK5D7zJC3vG3S7w4IFiBHmgRKz0fRpqVlx7JOj3whIb9P6qcWwuzS49pnFkGHsD/e4pW3E/0f+C89ZjDFSZX42rA7wgw0p3kftQGHn9ySalV2T0rne/em86ZyyQiDTvFRubhp35epC3gI3cv1EK1ouk= + - SAUCE_USERNAME=requirepack + - secure: "Gg2no6CkOreDPINT4xoJQPV/93Wq7MxZ7fwgATucuze9KYdidJaKFY8nEx3oJshFtPZ6t46JXxlVrR6n9De720R5RefHUBpuSVVzDedXsdYHXyjh6eNj1z88zteUcLp62hGipvAOrXUeC/l8OuCMCjeqIJtICYF4VJF7RlOyc5RnONOID0u62bogaGnwnHqTH/NlBVLjYDvPGrHhX2FB0TNQaRA89AaE69GyaCSFunEigpA48b/ogfHTF6OfHIvAvtLZf1hrQxGrf854snsqi/yi7+3Kz0m6EABINVGNmD29FqPteR5o7ZPquXt8A8IicL8omFM0jxgU4ma0hRFPvzZLaApFpsCtKfkN9h75LvFkTHkBNXXlaS/ZGMgxWzng6x7jOHxnoczoC2GrqPB48H0kZggHUa7O10gFhmmkbJOywAWv+X2cUaINL/Zn/mxons3JKa1ojb4DDT05TlpUDKv/zPhCAg0fB35GR2/XaZXs1wA8/2fA11VHHfB8Wea91sV+V+3L4H3PD5UueHEV4pE40t54GkjrLVr1OSFIqkDjgVHEkmHJQrx9uVoON6uWT7TwNNK9v2Nt9pRyIYFlHdm1S7pb6h279meN7NC9DueMXp3CYzTwWPgzHGg032tBZ8ga4Nr7wLYZu40Ql+h7D3aw4TWKyPNRo5YM3HkxqRc=" + +addons: + sauce_connect: + username: "requirepack" + access_key: + secure: "Bfed/J+/Xb1rzIsb3T+zLdXNaslNIia6AK4S52SkL59g4B24+PDMig83TBGpR5H8CmW3TZH4owSJ2PpHurq4cIp2xInqUj7ipNfsiRgdYj2iVZJMdq8U5oGv3V5fT5+VuFmMzwH9Aen+k8CVUZ5WLzY8baqixQhBR0D7uExePaG4aKLob5S81hEy6EXgst4bPfho4mi5v1b09MfUCVUnFe9is/obmPFzir9eGGoITW7Vf2z6WPqmdNr/cPl2gUs9QSvbc5YKp7BaSc8TxvgJ/g4jOdWFHtOmI8jC+He08p9Ft63J5GgC30L6unhBz+rncS1H5rYDssTgC52Hou9I4D+R7C4lbJ/JdiWBScAZNMMMPevxZxgrx2MQ6Pr2FvrKhgWjSSSAh6Uw8Gx2C5OXqqGyalmMea3nBB/AgD/S1rxvFzZ8OalI3TtDxMG/ryL3pcC4SRDWVaYeb24kW6Gq/0gcHNY6HREM3VRrZnvtwgOWghijmtNw6a699SYJ+jt5YIW8F/zU+JVZnq2UKB2RPl7mDT8JXjslOKqU8jLOVQNah/RBpsNeJDdiZQ6xHsroPORN14lUeZyHUBFD4SMPPsQAInmcr1lbRqHiYYkh2aaCDBZc5r1/+G05eYldQJs2hWZQy+DDd5raNLMj9hyrRTCAAweBftFoRKzeSSA/AyU=" script: # Run all base checks (with FF browser for functional tests). - npm run check-ci + # Sauce Labs + - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func + - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func + - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func + - ROWDY_SETTINGS="sauceLabs.safari_8_OS_X_10_10_Desktop" npm run test-func + # Manually send coverage reports to coveralls. - ls coverage/*/lcov.info | cat - cat coverage/*/lcov.info | ./node_modules/.bin/coveralls || echo "Coveralls upload failed" diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index b5aef8b..4a79a4b 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -15,7 +15,7 @@ process.env.NODE_ENV = process.env.NODE_ENV || "test-func"; var rowdy = require("rowdy"); var isSauceLabs = rowdy.config.setting.isSauceLabs; -if (isSauceLabs) { +if (isSauceLabs && process.env.LAUNCH_SAUCE_CONNECT === "true") { var connect = require("sauce-connect-launcher"); var connectPs; From f1847715700d0acaeaa33c9e3608f2a4c37c79a7 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 12:53:12 -0700 Subject: [PATCH 08/21] Disable all but one sauce tests. --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1b4a9b6..5484eef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,9 +37,9 @@ script: # Sauce Labs - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func - - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func - - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func - - ROWDY_SETTINGS="sauceLabs.safari_8_OS_X_10_10_Desktop" npm run test-func + # - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func + # - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func + # - ROWDY_SETTINGS="sauceLabs.safari_8_OS_X_10_10_Desktop" npm run test-func # Manually send coverage reports to coveralls. - ls coverage/*/lcov.info | cat From 4650a918a6a7795c7c28fca7c213ebf851b6819b Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 13:03:11 -0700 Subject: [PATCH 09/21] More debugging --- .travis.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5484eef..3b3518f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,20 +22,19 @@ before_script: env: global: + - SAUCE_CONNECT_TUNNEL_ID=$TRAVIS_JOB_NUMBER - SAUCE_USERNAME=requirepack - secure: "Gg2no6CkOreDPINT4xoJQPV/93Wq7MxZ7fwgATucuze9KYdidJaKFY8nEx3oJshFtPZ6t46JXxlVrR6n9De720R5RefHUBpuSVVzDedXsdYHXyjh6eNj1z88zteUcLp62hGipvAOrXUeC/l8OuCMCjeqIJtICYF4VJF7RlOyc5RnONOID0u62bogaGnwnHqTH/NlBVLjYDvPGrHhX2FB0TNQaRA89AaE69GyaCSFunEigpA48b/ogfHTF6OfHIvAvtLZf1hrQxGrf854snsqi/yi7+3Kz0m6EABINVGNmD29FqPteR5o7ZPquXt8A8IicL8omFM0jxgU4ma0hRFPvzZLaApFpsCtKfkN9h75LvFkTHkBNXXlaS/ZGMgxWzng6x7jOHxnoczoC2GrqPB48H0kZggHUa7O10gFhmmkbJOywAWv+X2cUaINL/Zn/mxons3JKa1ojb4DDT05TlpUDKv/zPhCAg0fB35GR2/XaZXs1wA8/2fA11VHHfB8Wea91sV+V+3L4H3PD5UueHEV4pE40t54GkjrLVr1OSFIqkDjgVHEkmHJQrx9uVoON6uWT7TwNNK9v2Nt9pRyIYFlHdm1S7pb6h279meN7NC9DueMXp3CYzTwWPgzHGg032tBZ8ga4Nr7wLYZu40Ql+h7D3aw4TWKyPNRo5YM3HkxqRc=" addons: - sauce_connect: - username: "requirepack" - access_key: - secure: "Bfed/J+/Xb1rzIsb3T+zLdXNaslNIia6AK4S52SkL59g4B24+PDMig83TBGpR5H8CmW3TZH4owSJ2PpHurq4cIp2xInqUj7ipNfsiRgdYj2iVZJMdq8U5oGv3V5fT5+VuFmMzwH9Aen+k8CVUZ5WLzY8baqixQhBR0D7uExePaG4aKLob5S81hEy6EXgst4bPfho4mi5v1b09MfUCVUnFe9is/obmPFzir9eGGoITW7Vf2z6WPqmdNr/cPl2gUs9QSvbc5YKp7BaSc8TxvgJ/g4jOdWFHtOmI8jC+He08p9Ft63J5GgC30L6unhBz+rncS1H5rYDssTgC52Hou9I4D+R7C4lbJ/JdiWBScAZNMMMPevxZxgrx2MQ6Pr2FvrKhgWjSSSAh6Uw8Gx2C5OXqqGyalmMea3nBB/AgD/S1rxvFzZ8OalI3TtDxMG/ryL3pcC4SRDWVaYeb24kW6Gq/0gcHNY6HREM3VRrZnvtwgOWghijmtNw6a699SYJ+jt5YIW8F/zU+JVZnq2UKB2RPl7mDT8JXjslOKqU8jLOVQNah/RBpsNeJDdiZQ6xHsroPORN14lUeZyHUBFD4SMPPsQAInmcr1lbRqHiYYkh2aaCDBZc5r1/+G05eYldQJs2hWZQy+DDd5raNLMj9hyrRTCAAweBftFoRKzeSSA/AyU=" + sauce_connect: true script: # Run all base checks (with FF browser for functional tests). - npm run check-ci # Sauce Labs + - echo "SAUCE_CONNECT_TUNNEL_ID: $SAUCE_CONNECT_TUNNEL_ID" - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func # - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func # - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func From b93899335dbbab5c2ceaf2a908105344df9dc7f0 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 13:17:45 -0700 Subject: [PATCH 10/21] Debug server close. --- .travis.yml | 1 - test/func/spec/base.spec.js | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3b3518f..d0bd328 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,6 @@ script: - npm run check-ci # Sauce Labs - - echo "SAUCE_CONNECT_TUNNEL_ID: $SAUCE_CONNECT_TUNNEL_ID" - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func # - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func # - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index 4a79a4b..9854c43 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -40,6 +40,9 @@ if (isSauceLabs && process.env.LAUNCH_SAUCE_CONNECT === "true") { }); after(function (done) { + /*eslint-disable no-console*/ + // TODO: REMOVE + console.log("TODO HERE AFTER CONNECT", connectPs.close); if (connectPs) { this.timeout(30000); return connectPs.close(done); @@ -96,6 +99,9 @@ before(function (done) { }); after(function (done) { + /*eslint-disable no-console*/ + console.log("TODO HERE AFTER BASE SPEC SERVER", server.server.close); + // TODO: REMOVE if (!(server && server.server)) { return done(); } // `http-server` doesn't pass the close callback, so we hack into the // underlying implementation. Sigh. From 799ce8717c8706b951206720d1a43aa5f04e0831 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 13:31:22 -0700 Subject: [PATCH 11/21] Wrap server in destroy. --- package.json | 1 + test/func/spec/base.spec.js | 10 +++------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 034f3c5..cbe60a4 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "sauce-connect-launcher": "^0.13.0", "saucelabs": "^1.0.1", "selenium-standalone": "^4.6.3", + "server-destroy": "^1.0.1", "sinon": "^1.17.1", "sinon-chai": "^2.8.0", "webdriverio": "^3.2.4", diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index 9854c43..b2c46ba 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -40,9 +40,6 @@ if (isSauceLabs && process.env.LAUNCH_SAUCE_CONNECT === "true") { }); after(function (done) { - /*eslint-disable no-console*/ - // TODO: REMOVE - console.log("TODO HERE AFTER CONNECT", connectPs.close); if (connectPs) { this.timeout(30000); return connectPs.close(done); @@ -79,6 +76,7 @@ adapter.after(); var APP_PORT = process.env.TEST_FUNC_PORT || 3030; var APP_HOST = process.env.TEST_FUNC_HOST || "127.0.0.1"; var httpServer = require("http-server"); +var enableDestroy = require("server-destroy"); var server; // ---------------------------------------------------------------------------- @@ -96,14 +94,12 @@ before(function () { before(function (done) { server = httpServer.createServer(); server.listen(APP_PORT, APP_HOST, done); + enableDestroy(server.server); }); after(function (done) { - /*eslint-disable no-console*/ - console.log("TODO HERE AFTER BASE SPEC SERVER", server.server.close); - // TODO: REMOVE if (!(server && server.server)) { return done(); } // `http-server` doesn't pass the close callback, so we hack into the // underlying implementation. Sigh. - server.server.close(done); + server.server.destroy(done); }); From 5365191ee3ee50e12aba976f060c572d66be5769 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 14:47:28 -0700 Subject: [PATCH 12/21] Start concurrent script. --- .gitignore | 2 +- .npmignore | 2 +- package.json | 1 + test/func/spec/base.spec.js | 16 ++++++---- test/util/run-concurrent.js | 59 +++++++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 test/util/run-concurrent.js diff --git a/.gitignore b/.gitignore index 996d275..40a53f4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ \.project bower_components node_modules -npm-debug\.log +npm-debug\.log* phantomjsdriver\.log # Build diff --git a/.npmignore b/.npmignore index 7875f18..580bb8f 100644 --- a/.npmignore +++ b/.npmignore @@ -5,7 +5,7 @@ \.project bower_components node_modules -npm-debug\.log +npm-debug\.log* phantomjsdriver\.log # Build diff --git a/package.json b/package.json index cbe60a4..402d888 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "server-destroy": "^1.0.1", "sinon": "^1.17.1", "sinon-chai": "^2.8.0", + "tree-kill": "^1.0.0", "webdriverio": "^3.2.4", "webpack": "^1.12.2" } diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index b2c46ba..b8f5566 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -78,6 +78,7 @@ var APP_HOST = process.env.TEST_FUNC_HOST || "127.0.0.1"; var httpServer = require("http-server"); var enableDestroy = require("server-destroy"); var server; +var realServer; // ---------------------------------------------------------------------------- // Globals @@ -94,12 +95,17 @@ before(function () { before(function (done) { server = httpServer.createServer(); server.listen(APP_PORT, APP_HOST, done); - enableDestroy(server.server); + + // `http-server` doesn't pass enough of the underlying server, so we capture it. + realServer = server.server; + + // Wrap the server with a "REALLY REALLY KILL IT!" `destroy` method. + enableDestroy(realServer); }); after(function (done) { - if (!(server && server.server)) { return done(); } - // `http-server` doesn't pass the close callback, so we hack into the - // underlying implementation. Sigh. - server.server.destroy(done); + if (!realServer) { return done(); } + + // Take that server! + realServer.destroy(done); }); diff --git a/test/util/run-concurrent.js b/test/util/run-concurrent.js new file mode 100644 index 0000000..2b1c191 --- /dev/null +++ b/test/util/run-concurrent.js @@ -0,0 +1,59 @@ +"use strict"; + +/** + * Run multiple commands concurrently. + * + * Usage: + * + * node test/util/run-concurrent.js "npm run test-func" "[ {ENV_VARS1}, {ENV_VARS2} ]" + */ +var _ = require("lodash"); +var async = require("async"); +var kill = require("tree-kill"); +var spawn = require("child_process").spawn; + +// Parse argv. +var args = process.argv; +if (args.length !== 4) { + throw new Error("requires two arguments: [command] [ENV_VARS_ARRAY]"); +} + +// Get the arguments. +// Command: Assume splitable on space. (VERY NAIVE). +var cmdParts = args[2].split(" "); +var cmd = cmdParts[0]; +var cmdFlags = _.rest(cmdParts); +var envObjs = JSON.parse(args[3]); + +// Track the processes. +var procs = []; + +// Let's go parallel! +async.map(envObjs, function (env, cb) { + var err; + + var proc = spawn(cmd, cmdFlags, { + stdio: "inherit", + env: _.merge({}, process.env, env) + }); + + proc.on("close", function (code) { + if (!err && code !== 0) { + err = new Error("non-zero exit of " + args[2] + " with: " + code); + err.code = code; + } + + cb(err); + }); + + procs.push(proc); +}, function (err) { + if (err) { + // Kill all existing procs. + async.map(procs, function (proc, cb) { + kill(proc.pid, "SIGKILL", cb); + }, function (killErr) { + throw killErr || err; + }); + } +}); From 5b55f0692eabb258ff607e53d692b54d96528708 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 17:06:52 -0700 Subject: [PATCH 13/21] Start making more concurrent based on travis. --- .travis.yml | 16 ++++++++++------ package.json | 2 +- test/func/setup.js | 11 ++++++++++- test/func/spec/base.spec.js | 2 ++ 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index d0bd328..21c1382 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,14 @@ branches: only: - master +env: + global: + - TEST_FUNC_PORT=3030 + - TEST_FUNC_HOST=127.0.0.1 + - SAUCE_CONNECT_TUNNEL_ID=$TRAVIS_JOB_NUMBER + - SAUCE_USERNAME=requirepack + - secure: "Gg2no6CkOreDPINT4xoJQPV/93Wq7MxZ7fwgATucuze9KYdidJaKFY8nEx3oJshFtPZ6t46JXxlVrR6n9De720R5RefHUBpuSVVzDedXsdYHXyjh6eNj1z88zteUcLp62hGipvAOrXUeC/l8OuCMCjeqIJtICYF4VJF7RlOyc5RnONOID0u62bogaGnwnHqTH/NlBVLjYDvPGrHhX2FB0TNQaRA89AaE69GyaCSFunEigpA48b/ogfHTF6OfHIvAvtLZf1hrQxGrf854snsqi/yi7+3Kz0m6EABINVGNmD29FqPteR5o7ZPquXt8A8IicL8omFM0jxgU4ma0hRFPvzZLaApFpsCtKfkN9h75LvFkTHkBNXXlaS/ZGMgxWzng6x7jOHxnoczoC2GrqPB48H0kZggHUa7O10gFhmmkbJOywAWv+X2cUaINL/Zn/mxons3JKa1ojb4DDT05TlpUDKv/zPhCAg0fB35GR2/XaZXs1wA8/2fA11VHHfB8Wea91sV+V+3L4H3PD5UueHEV4pE40t54GkjrLVr1OSFIqkDjgVHEkmHJQrx9uVoON6uWT7TwNNK9v2Nt9pRyIYFlHdm1S7pb6h279meN7NC9DueMXp3CYzTwWPgzHGg032tBZ8ga4Nr7wLYZu40Ql+h7D3aw4TWKyPNRo5YM3HkxqRc=" + before_install: # GUI for real browsers. - export DISPLAY=:99.0 @@ -19,12 +27,8 @@ before_install: before_script: # Install dev. stuff (e.g., selenium drivers). - npm run install-dev - -env: - global: - - SAUCE_CONNECT_TUNNEL_ID=$TRAVIS_JOB_NUMBER - - SAUCE_USERNAME=requirepack - - secure: "Gg2no6CkOreDPINT4xoJQPV/93Wq7MxZ7fwgATucuze9KYdidJaKFY8nEx3oJshFtPZ6t46JXxlVrR6n9De720R5RefHUBpuSVVzDedXsdYHXyjh6eNj1z88zteUcLp62hGipvAOrXUeC/l8OuCMCjeqIJtICYF4VJF7RlOyc5RnONOID0u62bogaGnwnHqTH/NlBVLjYDvPGrHhX2FB0TNQaRA89AaE69GyaCSFunEigpA48b/ogfHTF6OfHIvAvtLZf1hrQxGrf854snsqi/yi7+3Kz0m6EABINVGNmD29FqPteR5o7ZPquXt8A8IicL8omFM0jxgU4ma0hRFPvzZLaApFpsCtKfkN9h75LvFkTHkBNXXlaS/ZGMgxWzng6x7jOHxnoczoC2GrqPB48H0kZggHUa7O10gFhmmkbJOywAWv+X2cUaINL/Zn/mxons3JKa1ojb4DDT05TlpUDKv/zPhCAg0fB35GR2/XaZXs1wA8/2fA11VHHfB8Wea91sV+V+3L4H3PD5UueHEV4pE40t54GkjrLVr1OSFIqkDjgVHEkmHJQrx9uVoON6uWT7TwNNK9v2Nt9pRyIYFlHdm1S7pb6h279meN7NC9DueMXp3CYzTwWPgzHGg032tBZ8ga4Nr7wLYZu40Ql+h7D3aw4TWKyPNRo5YM3HkxqRc=" + - node_modules/.bin/selenium-standalone start & + - node_modules/.bin/http-server -a $TEST_FUNC_HOST -p $TEST_FUNC_PORT & addons: sauce_connect: true diff --git a/package.json b/package.json index 402d888..6f88c52 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "phantomjs": "^1.9.18", "require-handlebars-plugin": "FormidableLabs/require-handlebars-plugin#bug-ie8-forEach", "requirejs": "^2.1.20", - "rowdy": "^0.3.3", + "rowdy": "^0.3.4", "sauce-connect-launcher": "^0.13.0", "saucelabs": "^1.0.1", "selenium-standalone": "^4.6.3", diff --git a/test/func/setup.js b/test/func/setup.js index 741e518..8e880e9 100644 --- a/test/func/setup.js +++ b/test/func/setup.js @@ -9,11 +9,20 @@ var chai = require("chai"); var _ = require("lodash"); var rowdy = require("rowdy")(_.merge({}, require("rowdy/config"), { options: { - driverLib: "webdriverio" + driverLib: "webdriverio", + server: { + start: process.env.TRAVIS !== "true" + } } })); var Adapter = rowdy.adapters.mocha; +// Patch rowdy to force not started. +// TODO: FIX IN ROWDY +if (rowdy.setting.server.start) { + rowdy.setting.server.start = process.env.TRAVIS !== "true"; +} + // Add test lib globals. global.expect = chai.expect; global.adapter = new Adapter(); diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index b8f5566..da4ce34 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -93,6 +93,8 @@ before(function () { // App server // ---------------------------------------------------------------------------- before(function (done) { + if (process.env.TRAVIS === "true") { return done(); } + server = httpServer.createServer(); server.listen(APP_PORT, APP_HOST, done); From 7cadc01e79cf7ff27ec46d9a52f198c724a80db8 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 17:12:36 -0700 Subject: [PATCH 14/21] Need permissive rowdy check for starting --- test/func/setup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/func/setup.js b/test/func/setup.js index 8e880e9..071162a 100644 --- a/test/func/setup.js +++ b/test/func/setup.js @@ -19,7 +19,7 @@ var Adapter = rowdy.adapters.mocha; // Patch rowdy to force not started. // TODO: FIX IN ROWDY -if (rowdy.setting.server.start) { +if ((rowdy.setting.server || {}).start) { rowdy.setting.server.start = process.env.TRAVIS !== "true"; } From ed28f7d631de989cfe588bbf9da551a676d67ba7 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 17:20:09 -0700 Subject: [PATCH 15/21] Make servers more quiet. Start serial IE selenium on sauce. --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 21c1382..e52932d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,8 +27,8 @@ before_install: before_script: # Install dev. stuff (e.g., selenium drivers). - npm run install-dev - - node_modules/.bin/selenium-standalone start & - - node_modules/.bin/http-server -a $TEST_FUNC_HOST -p $TEST_FUNC_PORT & + - nohup bash -c "node_modules/.bin/selenium-standalone start 2>&1 &" + - nohup bash -c "node_modules/.bin/http-server -a $TEST_FUNC_HOST -p $TEST_FUNC_PORT --silent 2>&1 &" addons: sauce_connect: true @@ -39,8 +39,8 @@ script: # Sauce Labs - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func - # - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func - # - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func + - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func + - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func # - ROWDY_SETTINGS="sauceLabs.safari_8_OS_X_10_10_Desktop" npm run test-func # Manually send coverage reports to coveralls. From 32f0b6ceb096e28d5463136fda2113b0e3c88c6c Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 17:32:07 -0700 Subject: [PATCH 16/21] Try concurrent sauce. --- .travis.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index e52932d..b847a59 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,9 +38,14 @@ script: - npm run check-ci # Sauce Labs - - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func - - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func - - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func + - > node test/util/run-concurrent.js + "npm run test-func" + '[ { "ROWDY_SETTINGS": "sauceLabs.IE_8_Windows_2008_Desktop" }, { "ROWDY_SETTINGS": "sauceLabs.IE_9_Windows_2008_Desktop" } ]' + + # TODO: Figure out / remove + # - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func + # - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func + # - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func # - ROWDY_SETTINGS="sauceLabs.safari_8_OS_X_10_10_Desktop" npm run test-func # Manually send coverage reports to coveralls. From 9d3db1fc8bd8803f8b0e781ac46362d296194c90 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 17:33:31 -0700 Subject: [PATCH 17/21] Fix yaml for concurrent sauce. --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b847a59..0d2bb60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,9 +38,7 @@ script: - npm run check-ci # Sauce Labs - - > node test/util/run-concurrent.js - "npm run test-func" - '[ { "ROWDY_SETTINGS": "sauceLabs.IE_8_Windows_2008_Desktop" }, { "ROWDY_SETTINGS": "sauceLabs.IE_9_Windows_2008_Desktop" } ]' + - node test/util/run-concurrent.js "npm run test-func" '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" } ]' # TODO: Figure out / remove # - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func From b3ecfc3fd57623f77bf362ecf651483798e41958 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 16 Oct 2015 21:36:47 -0700 Subject: [PATCH 18/21] Try multiline again. --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0d2bb60..306d3af 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,7 +38,10 @@ script: - npm run check-ci # Sauce Labs - - node test/util/run-concurrent.js "npm run test-func" '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" } ]' + - >- + node test/util/run-concurrent.js "npm run test-func" + '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" } ]' # TODO: Figure out / remove # - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func From 2aeae8a3a9aec0a9a536d7074e9cb22b995ead6c Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Sat, 17 Oct 2015 08:33:59 -0700 Subject: [PATCH 19/21] More sauce / travis local test-func settings. --- .travis.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 306d3af..07c7080 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,13 +41,11 @@ script: - >- node test/util/run-concurrent.js "npm run test-func" '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, - { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" } ]' - - # TODO: Figure out / remove - # - ROWDY_SETTINGS="sauceLabs.IE_8_Windows_2008_Desktop" npm run test-func - # - ROWDY_SETTINGS="sauceLabs.IE_9_Windows_2008_Desktop" npm run test-func - # - ROWDY_SETTINGS="sauceLabs.IE_10_Windows_2012_Desktop" npm run test-func - # - ROWDY_SETTINGS="sauceLabs.safari_8_OS_X_10_10_Desktop" npm run test-func + { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.IE_10_Windows_2012_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.safari_8_OS_X_10_10_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.chrome_43_OS_X_10_10_Desktop" }, + { "ROWDY_SETTINGS":"local.firefox" } ]' # Manually send coverage reports to coveralls. - ls coverage/*/lcov.info | cat From 44c4fa3d441ccb404e017a17c08816237d031e4c Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Sat, 17 Oct 2015 09:07:22 -0700 Subject: [PATCH 20/21] Final tweaks --- README.md | 9 +++++---- test/func/setup.js | 6 ++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ce326f5..d3508ce 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -[![Travis Status][trav_img]][trav_site] -[![Coverage Status][cov_img]][cov_site] -[![Sauce Test Status][sauce_img]][sauce_site] - RequirePack =========== [Webpack][webpack] + [RequireJS][requirejs] shared library interoperability! +[![Travis Status][trav_img]][trav_site] +[![Coverage Status][cov_img]][cov_site] + +[![Sauce Test Status][sauce_img]][sauce_site] + Webpack and RequireJS both can consume AMD code straight up. Which means if you are in a transitional / complex scenario where you want _some_ code to load with Webpack and _other_ code to load with RequireJS from the same code base diff --git a/test/func/setup.js b/test/func/setup.js index 071162a..dfb95d9 100644 --- a/test/func/setup.js +++ b/test/func/setup.js @@ -4,6 +4,7 @@ * Test setup for functional tests. */ var chai = require("chai"); +var startSelenium = process.env.TRAVIS !== "true"; // Enable Rowdy with webdriverio. var _ = require("lodash"); @@ -11,7 +12,7 @@ var rowdy = require("rowdy")(_.merge({}, require("rowdy/config"), { options: { driverLib: "webdriverio", server: { - start: process.env.TRAVIS !== "true" + start: startSelenium } } })); @@ -19,8 +20,9 @@ var Adapter = rowdy.adapters.mocha; // Patch rowdy to force not started. // TODO: FIX IN ROWDY +// https://github.com/FormidableLabs/rowdy/issues/40 if ((rowdy.setting.server || {}).start) { - rowdy.setting.server.start = process.env.TRAVIS !== "true"; + rowdy.setting.server.start = startSelenium; } // Add test lib globals. From b87b5751f07c5d56a89f826d70e801c4939ea9da Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Sat, 17 Oct 2015 09:21:25 -0700 Subject: [PATCH 21/21] More failure information for concurrent. --- test/util/run-concurrent.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/util/run-concurrent.js b/test/util/run-concurrent.js index 2b1c191..8d57d7c 100644 --- a/test/util/run-concurrent.js +++ b/test/util/run-concurrent.js @@ -39,7 +39,11 @@ async.map(envObjs, function (env, cb) { proc.on("close", function (code) { if (!err && code !== 0) { - err = new Error("non-zero exit of " + args[2] + " with: " + code); + err = new Error( + "non-zero exit of " + args[2] + + " w/ env: " + JSON.stringify(env) + + " w/ code: " + code); + err.code = code; }