From 70da2797c2b6ac7a9a8c010ae4b2930fb380c292 Mon Sep 17 00:00:00 2001 From: Brian Mathews Date: Mon, 1 Aug 2016 10:23:01 -0700 Subject: [PATCH 1/5] Send request to webpack-dev-server before starting tests --- dev/spec-setup.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/dev/spec-setup.js b/dev/spec-setup.js index 8d7b656..628c4bf 100644 --- a/dev/spec-setup.js +++ b/dev/spec-setup.js @@ -1,10 +1,13 @@ /* eslint-disable global-require, no-console */ +var http = require("http"); var rowdy = require("rowdy"); var defaults = require("lodash.defaultsdeep"); var MochaAdapter = rowdy.adapters.mocha; var SERVER_HOST = "127.0.0.1"; var SERVER_PORT = "3000"; +var DEV_SERVER_TIMEOUT = 20000; +var ELEM_WAIT = 200; // Base directory for app on server, e.g., /open-source/victory global.TEST_FUNC_BASE_DIR = process.env.TEST_FUNC_BASE_DIR || ""; @@ -31,8 +34,6 @@ rowdy(config); var adapter = new MochaAdapter(); -var ELEM_WAIT = 200; - adapter.before(); adapter.beforeEach(); @@ -50,6 +51,8 @@ adapter.after(); var serveDev = function (cb) { console.log("Starting dev server..."); + this.timeout(DEV_SERVER_TIMEOUT); // longer timeout to wait for dev server to build bundle + var webpack = require("webpack"); var WebpackDevServer = require("webpack-dev-server"); @@ -62,7 +65,16 @@ var serveDev = function (cb) { historyApiFallback: true }); - wdsServer.listen(SERVER_PORT, SERVER_HOST, cb); + wdsServer.listen(SERVER_PORT, SERVER_HOST, function () { + // When the dev server's ready, hit the root url to trigger bundle build + http.get({ + hostname: SERVER_HOST, + port: SERVER_PORT, + path: global.TEST_FUNC_BASE_DIR + "/" + }, function (res) { + cb(); + }); + }); }; /* @@ -86,7 +98,7 @@ var serveStatic = function (cb) { before(function (done) { switch (process.env.TEST_FUNC) { case "static": return serveStatic(done); - case "dev": return serveDev(done); + case "dev": return serveDev.call(this, done); case "remote": if (!process.env.TEST_FUNC_BASE_URL) { console.warn("No TEST_FUNC_BASE_URL environment variable set. Defaulting to " + From c9bcac165ecf22c7240648b1d7f51ba801da5ca7 Mon Sep 17 00:00:00 2001 From: Brian Mathews Date: Wed, 10 Aug 2016 09:31:45 -0700 Subject: [PATCH 2/5] Allow DEV_SERVER_TIMEOUT to be set by env var --- dev/spec-setup.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/spec-setup.js b/dev/spec-setup.js index 628c4bf..2c4466b 100644 --- a/dev/spec-setup.js +++ b/dev/spec-setup.js @@ -6,7 +6,7 @@ var MochaAdapter = rowdy.adapters.mocha; var SERVER_HOST = "127.0.0.1"; var SERVER_PORT = "3000"; -var DEV_SERVER_TIMEOUT = 20000; +var DEV_SERVER_TIMEOUT = process.env.TEST_FUNC_DEV_SERVER_TIMEOUT || 20000; var ELEM_WAIT = 200; // Base directory for app on server, e.g., /open-source/victory @@ -71,7 +71,7 @@ var serveDev = function (cb) { hostname: SERVER_HOST, port: SERVER_PORT, path: global.TEST_FUNC_BASE_DIR + "/" - }, function (res) { + }, function () { cb(); }); }); From 1fa0fa77b0b71dd809238e888e9fe4e5eaec0e61 Mon Sep 17 00:00:00 2001 From: Brian Mathews Date: Thu, 11 Aug 2016 11:09:57 -0700 Subject: [PATCH 3/5] Export baseDir/Url. Use npm config for configuration --- CHANGELOG.md | 4 ++++ dev/package.json | 4 ++-- dev/spec-setup.js | 58 +++++++++++++++++++++++------------------------ package.json | 16 +++++++++---- 4 files changed, 47 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f99848..a2bc65d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Docs Archetype +# 4.0.0 (2016 Aug 11) + * Change how functional tests are configured, now via npm config + * Export baseUrl and baseDir instead of setting global variables + # 3.0.2 (2016 Jul 26) * Add baseUrl to webdriverio config diff --git a/dev/package.json b/dev/package.json index 04bf1cc..4b0a8c6 100644 --- a/dev/package.json +++ b/dev/package.json @@ -1,6 +1,6 @@ { "name": "builder-docs-archetype-dev", - "version": "3.0.2", + "version": "4.0.0", "description": "An archetype for building static landing/documentation pages for our projects. (Development)", "main": "index.js", "scripts": {}, @@ -33,4 +33,4 @@ }, "homepage": "https://github.com/FormidableLabs/builder-docs-archetype#readme", "peerDependencies": {} -} \ No newline at end of file +} diff --git a/dev/spec-setup.js b/dev/spec-setup.js index 2c4466b..d4e0d8c 100644 --- a/dev/spec-setup.js +++ b/dev/spec-setup.js @@ -2,17 +2,18 @@ var http = require("http"); var rowdy = require("rowdy"); var defaults = require("lodash.defaultsdeep"); -var MochaAdapter = rowdy.adapters.mocha; -var SERVER_HOST = "127.0.0.1"; -var SERVER_PORT = "3000"; -var DEV_SERVER_TIMEOUT = process.env.TEST_FUNC_DEV_SERVER_TIMEOUT || 20000; +var BASE_URL = process.env.npm_package_config_test_func_base_url; +var BASE_DIR = process.env.npm_package_config_test_func_base_dir; +var SERVER_HOST = process.env.npm_package_config_test_func_server_host; +var SERVER_PORT = process.env.npm_package_config_test_func_server_port; +var DEV_SERVER_TIMEOUT = process.env.npm_package_config_test_func_dev_server_timeout; +var MODE = process.env.npm_package_config_test_func_mode; var ELEM_WAIT = 200; -// Base directory for app on server, e.g., /open-source/victory -global.TEST_FUNC_BASE_DIR = process.env.TEST_FUNC_BASE_DIR || ""; -// Full app server url, e.g., http://localhost:3000/open-source/victory -global.TEST_FUNC_BASE_URL = process.env.TEST_FUNC_BASE_URL || "http://" + SERVER_HOST + ":" + SERVER_PORT + global.TEST_FUNC_BASE_DIR; +/* + * Setup Rowdy/Webdriverio + */ var base = require("rowdy/config"); var config = defaults({ @@ -24,7 +25,7 @@ var config = defaults({ default: { remote: { // http://webdriver.io/guide/getstarted/configuration.html#baseUrl - baseUrl: global.TEST_FUNC_BASE_URL + baseUrl: BASE_URL + BASE_DIR } } } @@ -32,16 +33,18 @@ var config = defaults({ }, base); rowdy(config); -var adapter = new MochaAdapter(); +/* + * Setup Mocha adapter + */ +var MochaAdapter = rowdy.adapters.mocha; +var adapter = new MochaAdapter(); adapter.before(); adapter.beforeEach(); - beforeEach(function () { - return adapter.client - .timeoutsImplicitWait(ELEM_WAIT); // Set timeout for waiting on elements. + // Set default timeout for waiting on elements. + return adapter.client.timeoutsImplicitWait(ELEM_WAIT); }); - adapter.afterEach(); adapter.after(); @@ -51,11 +54,9 @@ adapter.after(); var serveDev = function (cb) { console.log("Starting dev server..."); - this.timeout(DEV_SERVER_TIMEOUT); // longer timeout to wait for dev server to build bundle var webpack = require("webpack"); var WebpackDevServer = require("webpack-dev-server"); - var webpackCfg = require("builder-docs-archetype/config/webpack/webpack.config.dev"); var compiler = webpack(webpackCfg); @@ -65,12 +66,14 @@ var serveDev = function (cb) { historyApiFallback: true }); + // How long the test should wait before giving up + this.timeout(DEV_SERVER_TIMEOUT); wdsServer.listen(SERVER_PORT, SERVER_HOST, function () { // When the dev server's ready, hit the root url to trigger bundle build http.get({ hostname: SERVER_HOST, port: SERVER_PORT, - path: global.TEST_FUNC_BASE_DIR + "/" + path: BASE_DIR + "/" }, function () { cb(); }); @@ -87,28 +90,25 @@ var serveStatic = function (cb) { var ecstatic = require("ecstatic"); http.createServer( - ecstatic({ root: "./build", baseDir: global.TEST_FUNC_BASE_DIR + "/" }) + ecstatic({ root: "./build", baseDir: BASE_DIR + "/" }) ).listen(SERVER_PORT, SERVER_HOST, cb); }; /* - * Before tests run, determine URL and server needs + * Before tests run, start a server if necessary */ before(function (done) { - switch (process.env.TEST_FUNC) { - case "static": return serveStatic(done); - case "dev": return serveDev.call(this, done); - case "remote": - if (!process.env.TEST_FUNC_BASE_URL) { - console.warn("No TEST_FUNC_BASE_URL environment variable set. Defaulting to " + - global.TEST_FUNC_BASE_URL + "\n"); - } - return done(); + switch (MODE) { + case "static": return serveStatic.call(this, done); + case "dev": return serveDev.call(this, done); } + console.log("Expecting remote server at " + BASE_URL + BASE_DIR); return done(); }); module.exports = { - adapter: adapter + adapter: adapter, + baseDir: BASE_DIR, + baseUrl: BASE_URL }; diff --git a/package.json b/package.json index e1c06c0..3987740 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,16 @@ { "name": "builder-docs-archetype", - "version": "3.0.2", + "version": "4.0.0", "description": "An archetype for building static landing/documentation pages for our projects.", "main": "index.js", + "config": { + "test_func_mode": "dev", + "test_func_base_dir": "", + "test_func_base_url": "http://127.0.0.1:3000", + "test_func_dev_server_timeout": 20000, + "test_func_server_port": 3000, + "test_func_server_host": "127.0.0.1" + }, "scripts": { "dev": "webpack-dev-server --port 3000 --config node_modules/builder-docs-archetype/config/webpack/webpack.config.dev.js", "lint-react": "eslint --ext .js,.jsx src", @@ -17,9 +25,9 @@ "open-static": "open http://localhost:8080", "server-static": "ecstatic --port 8080 build", "builder:check": "eslint config", - "test-func-remote": "TEST_FUNC=remote mocha --opts ./test/func/mocha.opts", - "test-func-static": "TEST_FUNC=static mocha --opts ./test/func/mocha.opts", - "test-func-dev": "TEST_FUNC=dev mocha --opts ./test/func/mocha.opts", + "test-func-remote": "npm_package_config_test_func_mode=remote mocha --opts ./test/func/mocha.opts", + "test-func-static": "npm_package_config_test_func_mode=static mocha --opts ./test/func/mocha.opts", + "test-func-dev": "npm_package_config_test_func_mode=dev mocha --opts ./test/func/mocha.opts", "install-selenium": "selenium-standalone install" }, "author": "Paula Lavalle ", From 44ab78a9b1ca076f19709f87e3f4218b65eae590 Mon Sep 17 00:00:00 2001 From: Brian Mathews Date: Thu, 11 Aug 2016 13:19:35 -0700 Subject: [PATCH 4/5] Error handling when sending request to webpackDevServer --- dev/spec-setup.js | 13 ++++--------- package.json | 3 ++- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/dev/spec-setup.js b/dev/spec-setup.js index d4e0d8c..540e2cc 100644 --- a/dev/spec-setup.js +++ b/dev/spec-setup.js @@ -1,5 +1,5 @@ /* eslint-disable global-require, no-console */ -var http = require("http"); +var fetch = require("node-fetch"); var rowdy = require("rowdy"); var defaults = require("lodash.defaultsdeep"); @@ -69,14 +69,9 @@ var serveDev = function (cb) { // How long the test should wait before giving up this.timeout(DEV_SERVER_TIMEOUT); wdsServer.listen(SERVER_PORT, SERVER_HOST, function () { - // When the dev server's ready, hit the root url to trigger bundle build - http.get({ - hostname: SERVER_HOST, - port: SERVER_PORT, - path: BASE_DIR + "/" - }, function () { - cb(); - }); + fetch("http://" + SERVER_HOST + ":" + SERVER_PORT + BASE_DIR + "/") + .then(function () { cb(); }) + .catch(cb); }); }; diff --git a/package.json b/package.json index 3987740..16b7cbc 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,8 @@ "builder-support": "^0.3.0", "eslint": "^1.10.3", "eslint-config-defaults": "^8.0.2", - "eslint-plugin-filenames": "^0.2.0" + "eslint-plugin-filenames": "^0.2.0", + "node-fetch": "^1.6.0" }, "repository": { "type": "git", From 27ae41dbecbc9909aa6c343b6b032a578e1159db Mon Sep 17 00:00:00 2001 From: Brian Mathews Date: Thu, 11 Aug 2016 13:22:50 -0700 Subject: [PATCH 5/5] Add comment back to wds request --- dev/spec-setup.js | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/spec-setup.js b/dev/spec-setup.js index 540e2cc..8241fee 100644 --- a/dev/spec-setup.js +++ b/dev/spec-setup.js @@ -69,6 +69,7 @@ var serveDev = function (cb) { // How long the test should wait before giving up this.timeout(DEV_SERVER_TIMEOUT); wdsServer.listen(SERVER_PORT, SERVER_HOST, function () { + // When the dev server's ready, hit the root url to trigger bundle build fetch("http://" + SERVER_HOST + ":" + SERVER_PORT + BASE_DIR + "/") .then(function () { cb(); }) .catch(cb);