]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
test(e2e): build e2e tests
authorEduardo San Martin Morote <posva13@gmail.com>
Thu, 2 Apr 2020 12:49:53 +0000 (14:49 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Thu, 2 Apr 2020 12:49:53 +0000 (14:49 +0200)
.gitignore
e2e/browserstack-send-status.js
e2e/devServer.js [moved from e2e/server.js with 100% similarity]
e2e/nightwatch.browserstack.js
e2e/runner.js
e2e/staticServer.js [new file with mode: 0644]
e2e/webpack.config.js
package.json
yarn.lock

index 406f1677088e1554d85940b9ee173de869de232f..76460d83ff113084f529b5e2ea081c16d058aebc 100644 (file)
@@ -9,7 +9,7 @@ local.log
 .DS_Store
 e2e/reports
 e2e/screenshots
-examples/__build__
+__build__
 playground_dist
 yarn-error.log
 temp
index 0cb326fca02b7955382a70764e055e1ed7a8425b..ca26ce08d29bb2f2d0c683c967b1129b87053312 100644 (file)
@@ -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
similarity index 100%
rename from e2e/server.js
rename to e2e/devServer.js
index 7b207692cf82bcd4860f4b4644211b6a2bea28c4..9060dab72fa8070178e5409d2837b02e1b36ee3a 100644 (file)
@@ -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,
       },
     },
 
index 983c54725e48a2d033a2846f6fa520934545bfb7..11fb6540a9986ccad2420c3a5d763b2dc834b0fd 100644 (file)
@@ -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 (file)
index 0000000..0f9ba22
--- /dev/null
@@ -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`)
+})
index 545c1340dd0a8ac85119a166d4ed026f57bff961..88ba9d08c2c7adb6e8ad9bb729b08cbc7f78fad2 100644 (file)
@@ -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
index d7e8ac94cb67af653e37424443df374fe04e855e..7330bc8aa59b333a96db7c0031d72e1f9da0ad7e 100644 (file)
     "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",
index 19910023626cbaff1dbf1b77be71d877a7a027c4..6819ff82ed1484184cb6779c75fa1123833e6061 100644 (file)
--- 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"