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, "private": true,
"name": "ionic2", "name": "@ionic/angular",
"version": "3.3.0", "version": "4.0.0",
"description": "A powerful framework for building mobile and progressive web apps with JavaScript and Angular", "description": "A powerful framework for building mobile and progressive web apps with TypeScript and Angular",
"keywords": [ "keywords": [
"ionic", "ionic",
"framework", "framework",

View File

@ -4,6 +4,15 @@
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "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": { "@stencil/core": {
"version": "0.0.6", "version": "0.0.6",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.6.tgz", "resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.6.tgz",
@ -22,11 +31,12 @@
} }
}, },
"@stencil/dev-server": { "@stencil/dev-server": {
"version": "0.0.17", "version": "0.0.18-0",
"resolved": "https://registry.npmjs.org/@stencil/dev-server/-/dev-server-0.0.17.tgz", "resolved": "https://registry.npmjs.org/@stencil/dev-server/-/dev-server-0.0.18-0.tgz",
"integrity": "sha512-dVkD4ypNqw7f6GTk217z0v3E4tMA32t5+Ahu/6yBUcO2uMPsA/IUrYVTHaU5FFSyD0txrZ6hAj/1/4scmTUErQ==", "integrity": "sha512-NO61g5gj3dd+103nDr7MIzK0r4GzE370+dZAflWIxUPQPUXlCLetWVZ1L/BlGlNzmjYFaMdiVRdie3NLx2ewjQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@ionic/discover": "0.3.3",
"chokidar": "1.7.0", "chokidar": "1.7.0",
"ecstatic": "2.2.1", "ecstatic": "2.2.1",
"opn": "5.1.0", "opn": "5.1.0",
@ -1084,6 +1094,12 @@
"event-emitter": "0.3.5" "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": { "es6-set": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
@ -2879,9 +2895,9 @@
} }
}, },
"http-parser-js": { "http-parser-js": {
"version": "0.4.8", "version": "0.4.9",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.8.tgz", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
"integrity": "sha512-jmHp99g6/fLx0pRNJqzsQgjsclCHAY7NhIeA3/U+bsGNvgbvUCQFQY9m5AYpqpAxY/2VcikfbKpjQozSTiz0jA==", "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
"dev": true "dev": true
}, },
"http-signature": { "http-signature": {
@ -2907,6 +2923,12 @@
"integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==",
"dev": true "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": { "imurmurhash": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@ -4471,6 +4493,47 @@
"verror": "1.10.0" "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": { "kind-of": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@ -4518,6 +4581,15 @@
"type-check": "0.3.2" "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": { "livereload-js": {
"version": "2.2.2", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz",
@ -4818,6 +4890,12 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true "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": { "node-gyp": {
"version": "3.6.2", "version": "3.6.2",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
@ -5096,6 +5174,12 @@
"p-limit": "1.1.0" "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": { "parse-glob": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "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": { "semver": {
"version": "5.4.1", "version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
@ -6105,6 +6201,15 @@
"qs": "6.5.1" "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": { "tmpl": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@ -6406,7 +6511,7 @@
"integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
"dev": true, "dev": true,
"requires": { "requires": {
"http-parser-js": "0.4.8", "http-parser-js": "0.4.9",
"websocket-extensions": "0.1.2" "websocket-extensions": "0.1.2"
} }
}, },
@ -6545,6 +6650,22 @@
"integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
"dev": true "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": { "xtend": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",

View File

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