From: Eduardo San Martin Morote Date: Thu, 2 Apr 2020 12:49:53 +0000 (+0200) Subject: test(e2e): build e2e tests X-Git-Tag: v4.0.0-alpha.5~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6080338d7c06ef3d49227e79256afbe9420518dc;p=thirdparty%2Fvuejs%2Frouter.git test(e2e): build e2e tests --- diff --git a/.gitignore b/.gitignore index 406f1677..76460d83 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ local.log .DS_Store e2e/reports e2e/screenshots -examples/__build__ +__build__ playground_dist yarn-error.log temp diff --git a/e2e/browserstack-send-status.js b/e2e/browserstack-send-status.js index 0cb326fc..ca26ce08 100644 --- a/e2e/browserstack-send-status.js +++ b/e2e/browserstack-send-status.js @@ -1,7 +1,6 @@ const axios = require('axios') -const BS_USER = process.env.BS_USER -const BS_KEY = process.env.BS_KEY +const { BS_USER, BS_KEY } = process.env function getKey(client) { // const { capabilities, currentTest } = client diff --git a/e2e/server.js b/e2e/devServer.js similarity index 100% rename from e2e/server.js rename to e2e/devServer.js diff --git a/e2e/nightwatch.browserstack.js b/e2e/nightwatch.browserstack.js index 7b207692..9060dab7 100644 --- a/e2e/nightwatch.browserstack.js +++ b/e2e/nightwatch.browserstack.js @@ -2,8 +2,7 @@ * Running tests on remote browsers */ -const BS_USER = process.env.BS_USER -const BS_KEY = process.env.BS_KEY +const { BS_USER, BS_KEY } = process.env const nwConf = { src_folders: ['e2e/specs'], @@ -79,7 +78,7 @@ const nwConf = { browser: 'internet explorer', browser_version: '11', // name: 'Bstack-[Nightwatch] Vue Router', - // 'browserstack.video': true + // 'browserstack.video': true, }, }, diff --git a/e2e/runner.js b/e2e/runner.js index 983c5472..11fb6540 100644 --- a/e2e/runner.js +++ b/e2e/runner.js @@ -27,7 +27,12 @@ const Nightwatch = require('nightwatch') const args = process.argv.slice(2) // if we are running yarn dev locally, we can pass --dev to avoid launching another server instance -const server = args.indexOf('--dev') > -1 ? null : require('./server') +const server = + args.indexOf('--dev') > -1 + ? null + : process.env.CI || args.indexOf('--ci') > -1 + ? require('./staticServer') + : require('./devServer') // allow running browserstack local const isLocal = args.indexOf('--local') > -1 diff --git a/e2e/staticServer.js b/e2e/staticServer.js new file mode 100644 index 00000000..0f9ba228 --- /dev/null +++ b/e2e/staticServer.js @@ -0,0 +1,33 @@ +const handler = require('serve-handler') +const http = require('http') +const fs = require('fs') +const path = require('path') + +/** @type {string[]} */ +let examples = [] +const buildDir = path.join(__dirname, '__build__') +fs.readdirSync(buildDir).forEach(file => { + if (file.endsWith('.html') && !/index\.html$/.test(file)) { + const fullPath = path.join(buildDir, file) + if (fs.statSync(fullPath).isFile() && fs.existsSync(fullPath)) { + examples.push(file.replace(/\.html$/, '')) + } + } +}) + +const server = http.createServer((request, response) => { + return handler(request, response, { + public: '__build__', + cleanUrls: true, + rewrites: examples.map(name => ({ + source: `${name}/**`, + trailingSlash: true, + destination: `${name}.html`, + })), + }) +}) + +const port = process.env.PORT || 8080 +module.exports = server.listen(port, () => { + console.log(`Server listening on http://localhost:${port}, Ctrl+C to stop`) +}) diff --git a/e2e/webpack.config.js b/e2e/webpack.config.js index 545c1340..88ba9d08 100644 --- a/e2e/webpack.config.js +++ b/e2e/webpack.config.js @@ -16,16 +16,16 @@ fs.readdirSync(__dirname).forEach(dir => { const globalCss = resolve(__dirname, 'global.css') -module.exports = { +const config = (env = {}) => ({ // Expose __dirname to allow automatically setting basename. context: __dirname, node: { __dirname: true, }, - mode: process.env.NODE_ENV || 'development', + mode: env.prod ? 'production' : 'development', + devtool: env.prod ? 'source-map' : 'inline-source-map', - devtool: 'inline-source-map', devServer: { historyApiFallback: { rewrites: examples.map(name => ({ @@ -66,7 +66,7 @@ module.exports = { }, resolve: { alias: { - vue: resolve(__dirname, '../node_modules/vue/dist/vue.esm.js'), + vue: resolve(__dirname, '../node_modules/vue/dist/vue.esm-bundler.js'), 'vue-router': join(__dirname, '..', 'src'), }, // Add `.ts` and `.tsx` as a resolvable extension. @@ -94,4 +94,6 @@ module.exports = { template: resolve(__dirname, 'index.html'), }), ], -} +}) + +module.exports = config diff --git a/package.json b/package.json index d7e8ac94..7330bc8a 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,15 @@ "release": "bash scripts/release.sh", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 1", "build:playground": "webpack --env.prod", + "build:e2e": "webpack --env.prod --config e2e/webpack.config.js", "dev:e2e": "webpack-dev-server --mode=development --config e2e/webpack.config.js", "lint": "prettier -c --parser typescript \"{src,__tests__,e2e}/**/*.[jt]s?(x)\"", "lint:fix": "yarn run lint --write", "test:types": "tsc --build tsconfig.json", "test:unit": "jest --coverage", - "test": "yarn run test:types && yarn run test:unit" + "test": "yarn run test:types && yarn run test:unit", + "test:e2e": "node e2e/runner.js", + "test:e2e:ci": "node e2e/runner.js --local -e ie,android44 -c e2e/nightwatch.browserstack.js e2e/specs/basic.js" }, "gitHooks": { "pre-commit": "lint-staged", @@ -75,6 +78,7 @@ "rollup-plugin-terser": "^5.3.0", "rollup-plugin-typescript2": "^0.26.0", "selenium-server": "^3.141.59", + "serve-handler": "^6.1.2", "style-loader": "^1.1.3", "ts-jest": "^25.3.0", "ts-loader": "^6.2.2", diff --git a/yarn.lock b/yarn.lock index 19910023..6819ff82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2108,6 +2108,11 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -3339,6 +3344,13 @@ fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= + dependencies: + punycode "^1.3.2" + fastq@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.1.tgz#4570c74f2ded173e71cf0beb08ac70bb85826791" @@ -5835,6 +5847,18 @@ mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" @@ -6638,7 +6662,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: +path-is-inside@1.0.2, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -6663,6 +6687,11 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -6989,7 +7018,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: +punycode@^1.2.4, punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -7049,6 +7078,11 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -7611,6 +7645,20 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serve-handler@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.2.tgz#f05b0421a313fff2d257838cba00cbcc512cd2b6" + integrity sha512-RFh49wX7zJmmOVDcIjiDSJnMH+ItQEvyuYLYuDBVoA/xmQSCuj+uRmk1cmBB5QQlI3qOiWKp6p4DUGY+Z5AB2A== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.0.4" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"