feat(e2e): create basic e2e test runner

This is mostly PoC code that shows how this can be done. This will grow
into the actual test runner.
This commit is contained in:
Ken Sodemann
2017-10-26 10:12:56 -05:00
parent e5536a4331
commit d9d0150b4c
8 changed files with 157 additions and 11 deletions

View File

@ -1,8 +1,8 @@
{
"private": true,
"name": "ionic2",
"version": "3.3.0",
"description": "A powerful framework for building mobile and progressive web apps with JavaScript and Angular",
"name": "@ionic/angular",
"version": "4.0.0",
"description": "A powerful framework for building mobile and progressive web apps with TypeScript and Angular",
"keywords": [
"ionic",
"framework",

View File

@ -4,6 +4,15 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@ionic/discover": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@ionic/discover/-/discover-0.3.3.tgz",
"integrity": "sha512-xciPTCEMYHv6sT7e4NwrAGkVQ8prj1NK9xO2z7/MoB+/HhREDsYDreNjU0lZF6G4X/91HcNNPC439D2WkAGd1w==",
"dev": true,
"requires": {
"netmask": "1.0.6"
}
},
"@stencil/core": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.6.tgz",
@ -22,11 +31,12 @@
}
},
"@stencil/dev-server": {
"version": "0.0.17",
"resolved": "https://registry.npmjs.org/@stencil/dev-server/-/dev-server-0.0.17.tgz",
"integrity": "sha512-dVkD4ypNqw7f6GTk217z0v3E4tMA32t5+Ahu/6yBUcO2uMPsA/IUrYVTHaU5FFSyD0txrZ6hAj/1/4scmTUErQ==",
"version": "0.0.18-0",
"resolved": "https://registry.npmjs.org/@stencil/dev-server/-/dev-server-0.0.18-0.tgz",
"integrity": "sha512-NO61g5gj3dd+103nDr7MIzK0r4GzE370+dZAflWIxUPQPUXlCLetWVZ1L/BlGlNzmjYFaMdiVRdie3NLx2ewjQ==",
"dev": true,
"requires": {
"@ionic/discover": "0.3.3",
"chokidar": "1.7.0",
"ecstatic": "2.2.1",
"opn": "5.1.0",
@ -1084,6 +1094,12 @@
"event-emitter": "0.3.5"
}
},
"es6-promise": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
"integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
"dev": true
},
"es6-set": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
@ -2879,9 +2895,9 @@
}
},
"http-parser-js": {
"version": "0.4.8",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.8.tgz",
"integrity": "sha512-jmHp99g6/fLx0pRNJqzsQgjsclCHAY7NhIeA3/U+bsGNvgbvUCQFQY9m5AYpqpAxY/2VcikfbKpjQozSTiz0jA==",
"version": "0.4.9",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
"integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
"dev": true
},
"http-signature": {
@ -2907,6 +2923,12 @@
"integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==",
"dev": true
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
"dev": true
},
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@ -4471,6 +4493,47 @@
"verror": "1.10.0"
}
},
"jszip": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.4.tgz",
"integrity": "sha512-z6w8iYIxZ/fcgul0j/OerkYnkomH8BZigvzbxVmr2h5HkZUrPtk2kjYtLkqR9wwQxEP6ecKNoKLsbhd18jfnGA==",
"dev": true,
"requires": {
"core-js": "2.3.0",
"es6-promise": "3.0.2",
"lie": "3.1.1",
"pako": "1.0.6",
"readable-stream": "2.0.6"
},
"dependencies": {
"core-js": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
"integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
"dev": true
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"string_decoder": "0.10.31",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
}
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@ -4518,6 +4581,15 @@
"type-check": "0.3.2"
}
},
"lie": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
"integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
"dev": true,
"requires": {
"immediate": "3.0.6"
}
},
"livereload-js": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz",
@ -4818,6 +4890,12 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
"netmask": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
"integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=",
"dev": true
},
"node-gyp": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
@ -5096,6 +5174,12 @@
"p-limit": "1.1.0"
}
},
"pako": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
"integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
"dev": true
},
"parse-glob": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
@ -5737,6 +5821,18 @@
}
}
},
"selenium-webdriver": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz",
"integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==",
"dev": true,
"requires": {
"jszip": "3.1.4",
"rimraf": "2.6.2",
"tmp": "0.0.30",
"xml2js": "0.4.19"
}
},
"semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
@ -6105,6 +6201,15 @@
"qs": "6.5.1"
}
},
"tmp": {
"version": "0.0.30",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
"integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
"dev": true,
"requires": {
"os-tmpdir": "1.0.2"
}
},
"tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@ -6406,7 +6511,7 @@
"integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
"dev": true,
"requires": {
"http-parser-js": "0.4.8",
"http-parser-js": "0.4.9",
"websocket-extensions": "0.1.2"
}
},
@ -6545,6 +6650,22 @@
"integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
"dev": true
},
"xml2js": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
"dev": true,
"requires": {
"sax": "1.2.4",
"xmlbuilder": "9.0.4"
}
},
"xmlbuilder": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz",
"integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=",
"dev": true
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",

View File

@ -11,18 +11,20 @@
],
"devDependencies": {
"@stencil/core": "^0.0.6",
"@stencil/dev-server": "latest",
"@stencil/dev-server": "0.0.18-0",
"@stencil/utils": "latest",
"@types/jest": "^21.1.0",
"ionicons": "^4.0.0-6",
"jest": "^21.1.0",
"sass-lint": "^1.11.1",
"selenium-webdriver": "^3.6.0",
"tslint": "^5.7.0",
"tslint-ionic-rules": "0.0.11"
},
"scripts": {
"build": "stencil build",
"dev": "sd concurrent \"stencil build --dev --watch\" \"stencil-dev-server\"",
"e2e": "node ./scripts/e2e-test-runner.js",
"test": "jest --no-cache",
"test.watch": "jest --watch --no-cache",
"clean": "rm -rf dist",

View File

@ -0,0 +1,18 @@
const path = require('path');
const server = require('@stencil/dev-server/dist'); // TODO: fix after stencil-dev-server PR #16 is merged
const webdriver = require('selenium-webdriver');
const driver = new webdriver.Builder().forBrowser('chrome').build();
cmdArgs = [
'--config', path.join(__dirname, '../stencil.config.js'),
'--no-open'
];
(async () => {
const devServer = await server.run(cmdArgs);
await driver.navigate().to('http://localhost:3333/src/components/button/test/basic.html');
driver.close();
devServer.close();
})();

View File

@ -0,0 +1,5 @@
describe('buttons', () => {
it('loads', () => {
});
});