Skip to content

Commit d32b4c0

Browse files
committed
- Concept for e2e testing using jest
1 parent 0b6fd22 commit d32b4c0

File tree

5 files changed

+2217
-45
lines changed

5 files changed

+2217
-45
lines changed

jest.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module.exports = {
2-
testRegex: '.*\\.spec\\.(ts|js)$',
2+
testRegex: '.*\\.spec\\.(js|js)$',
33
testPathIgnorePatterns: [
44
'/node_modules/',
55
'<rootDir>/dist/',

package.json

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"release": "rollup --config --environment NODE_ENV:production",
5050
"start": "nest start --path ./test/server/tsconfig.json",
5151
"start:watch": "nest start --path ./test/server/tsconfig.json --watch",
52+
"run": "node ./test/index.js",
5253
"test": "jest",
5354
"test:update": "jest --updateSnapshot",
5455
"test:watch": "jest --watch",
@@ -97,15 +98,18 @@
9798
"eslint-config-prettier": "6.11.0",
9899
"eslint-plugin-prettier": "3.1.4",
99100
"eslint-plugin-simple-import-sort": "5.0.3",
101+
"express": "4.17.1",
100102
"glob": "7.1.6",
101103
"jest": "26.4.2",
102104
"jest-cli": "26.4.2",
103105
"prettier": "2.1.2",
106+
"puppeteer": "5.3.1",
104107
"reflect-metadata": "0.1.13",
105108
"rollup": "2.28.2",
106109
"rollup-plugin-terser": "7.0.2",
107110
"rollup-plugin-typescript2": "0.27.2",
108111
"swagger-ui-express": "4.1.4",
112+
"testcafe": "1.9.3",
109113
"typescript": "4.0.3"
110114
}
111115
}

test/index.spec.js

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
'use strict';
2+
3+
const express = require('express');
4+
const puppeteer = require('puppeteer');
5+
const fs = require('fs');
6+
const path = require('path');
7+
const http = require('http');
8+
9+
describe('e2e', () => {
10+
11+
let app;
12+
let browser;
13+
let page;
14+
let server;
15+
16+
beforeAll(async () => {
17+
app = express();
18+
app.all('/api/*', (req, res) => {
19+
res.send({
20+
method: req.method,
21+
protocol: req.protocol,
22+
hostname: req.hostname,
23+
path: req.path,
24+
url: req.url,
25+
query: req.query,
26+
body: req.body,
27+
headers: req.headers,
28+
});
29+
});
30+
server = app.listen(3000);
31+
browser = await puppeteer.launch();
32+
page = await browser.newPage();
33+
});
34+
35+
afterAll(async () => {
36+
await page.close();
37+
await browser.close();
38+
await server.close();
39+
});
40+
41+
it('runs in chrome', async () => {
42+
await page.goto('http://localhost:3000/api/test', {
43+
waitUntil: 'networkidle0',
44+
});
45+
const content = await page.content();
46+
expect(content).toBeDefined();
47+
});
48+
49+
it('runs in node', async () => {
50+
return new Promise((resolve) => {
51+
http.get('http://localhost:3000/api/test', (res) => {
52+
const chunks = [];
53+
res.on('data', (chunk) => {
54+
chunks.push(chunk);
55+
});
56+
res.on('end', () => {
57+
const content = Buffer.concat(chunks).toString();
58+
console.log(content);
59+
expect(content).toBeDefined();
60+
resolve();
61+
});
62+
})
63+
});
64+
});
65+
66+
})

test/readme.md

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
In the before all script:
2+
3+
generate 6 libraries
4+
- fetch (v2 & v3)
5+
- xhr (v2 & v3)
6+
- node (v2 & v3)
7+
8+
/generated/v2/fetch
9+
/generated/v2/xhr
10+
/generated/v2/node
11+
/generated/v3/fetch
12+
/generated/v3/xhr
13+
/generated/v3/node
14+
15+
link in 6 projects
16+
- fetch (v2 & v3)
17+
- xhr (v2 & v3)
18+
- node (v2 & v3)
19+
Note: This can be one base 'template' that copies to dirs above
20+
21+
Compile projects
22+
23+
Start server that serves the api echo sever.
24+
25+
In the tests:
26+
Run e2e tests (node + puppeteer)
27+
28+
After all tests:
29+
Close pupeteer and server!
30+
31+

0 commit comments

Comments
 (0)