Skip to content

Commit d650428

Browse files
committed
feat(test): run e2e of generated project
1 parent 234de2b commit d650428

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"sinon": "^1.17.3",
7474
"through": "^2.3.8",
7575
"tslint": "^3.8.1",
76+
"tree-kill": "^1.0.0",
7677
"walk-sync": "^0.2.6"
7778
}
7879
}

tests/e2e/e2e_workflow.spec.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ var chai = require('chai');
77
var expect = chai.expect;
88
var conf = require('ember-cli/tests/helpers/conf');
99
var sh = require('shelljs');
10+
var treeKill = require('tree-kill');
11+
var child_process = require('child_process');
12+
var Promise = require('ember-cli/lib/ext/promise');
13+
var execPromise = Promise.denodeify(child_process.exec);
1014
var ng = require('../helpers/ng');
1115
var root = path.join(process.cwd(), 'tmp');
1216

@@ -115,6 +119,39 @@ describe('Basic end-to-end Workflow', function () {
115119
});
116120
});
117121

122+
it('Serve and run e2e tests after initial build', function () {
123+
this.timeout(420000);
124+
125+
var ngServePid;
126+
127+
function executor(resolve, reject) {
128+
var serveFailedMsg = 'ng serve command failed';
129+
var e2eFailedMsg = 'ng serve command failed';
130+
var child = child_process.exec('ng serve');
131+
ngServePid = child.pid;
132+
133+
child.stdout.on('data', (data) => {
134+
if (/^Build successful/.test(data)) {
135+
resolve(execPromise('ng e2e').catch(() => Promise.reject(e2eFailedMsg)));
136+
} else if (/ failed with:/.test(data)) {
137+
reject(serveFailedMsg);
138+
}
139+
});
140+
141+
child.stderr.on('data', () => reject(serveFailedMsg));
142+
child.on('close', (code) => code === 0 ? resolve() : reject(serveFailedMsg));
143+
}
144+
145+
return new Promise(executor)
146+
.then(() => {
147+
if (ngServePid) treeKill(ngServePid);
148+
})
149+
.catch((msg) => {
150+
if (ngServePid) treeKill(ngServePid);
151+
throw new Error(msg);
152+
});
153+
});
154+
118155
it('Can create a test component using `ng generate component test-component`', function () {
119156
this.timeout(10000);
120157
return ng(['generate', 'component', 'test-component']).then(function () {
@@ -373,4 +410,37 @@ describe('Basic end-to-end Workflow', function () {
373410
expect('build failed where it should have succeeded').to.equal('');
374411
});
375412
});
413+
414+
it('Serve and run e2e tests after final build', function () {
415+
this.timeout(420000);
416+
417+
var ngServePid;
418+
419+
function executor(resolve, reject) {
420+
var serveFailedMsg = 'ng serve command failed';
421+
var e2eFailedMsg = 'ng serve command failed';
422+
var child = child_process.exec(`${ngBin} serve`);
423+
ngServePid = child.pid;
424+
425+
child.stdout.on('data', (data) => {
426+
if (/^Build successful/.test(data)) {
427+
resolve(execPromise(`${ngBin} e2e`).catch(() => Promise.reject(e2eFailedMsg)));
428+
} else if (/ failed with:/.test(data)) {
429+
reject(serveFailedMsg);
430+
}
431+
});
432+
433+
child.stderr.on('data', () => reject(serveFailedMsg));
434+
child.on('close', (code) => code === 0 ? resolve() : reject(serveFailedMsg));
435+
}
436+
437+
return new Promise(executor)
438+
.then(() => {
439+
if (ngServePid) treeKill(ngServePid);
440+
})
441+
.catch((msg) => {
442+
if (ngServePid) treeKill(ngServePid);
443+
throw new Error(msg);
444+
});
445+
});
376446
});

0 commit comments

Comments
 (0)