Skip to content

Commit 57a0da1

Browse files
authored
Merge pull request #93 from pmmmwh/feat/test-suite
2 parents d2ade70 + f7697f8 commit 57a0da1

File tree

16 files changed

+1027
-3
lines changed

16 files changed

+1027
-3
lines changed

.circleci/config.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
version: 2.1
2+
3+
orbs:
4+
node: circleci/node@2.1.1
5+
6+
commands:
7+
setup-headless-chromium:
8+
steps:
9+
- run:
10+
name: Install dependencies for headless Chromium
11+
command: |
12+
sudo apt-get update
13+
sudo apt-get install -yq \
14+
gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
15+
libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 \
16+
libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
17+
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \
18+
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
19+
- run:
20+
name: Setup sandboxing for Chromium
21+
command: sudo sysctl -w kernel.unprivileged_userns_clone=1
22+
23+
jobs:
24+
test:
25+
executor:
26+
name: node/default
27+
tag: << parameters.node-version >>
28+
parameters:
29+
node-version:
30+
default: '13.14'
31+
type: string
32+
setup:
33+
default: []
34+
type: steps
35+
steps:
36+
- checkout
37+
- setup-headless-chromium
38+
- steps: << parameters.setup >>
39+
- node/install-packages:
40+
app-dir: ~/project
41+
pkg-manager: yarn
42+
with-cache: false
43+
- run:
44+
name: Run Tests
45+
command: yarn test
46+
working_directory: ~/project
47+
48+
workflows:
49+
test-matrix:
50+
jobs:
51+
- test:
52+
name: test/node:10
53+
node-version: '10.20'
54+
- test:
55+
name: test/node:12
56+
node-version: '12.16'
57+
- test:
58+
name: test/node:13
59+
node-version: '13.14'
60+
- test:
61+
name: test/node:14
62+
node-version: '14.2'

.eslintrc.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,20 @@
55
},
66
"env": {
77
"browser": true,
8+
"commonjs": true,
89
"es6": true,
910
"node": true
10-
}
11+
},
12+
"overrides": [
13+
{
14+
"files": ["test/sandbox/*.js", "test/**/*.test.js"],
15+
"env": {
16+
"jest": true
17+
},
18+
"globals": {
19+
"__DEBUG__": true,
20+
"browser": true
21+
}
22+
}
23+
]
1124
}

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ yarn-error.log*
2121
# lockfiles
2222
package-lock.json
2323
/yarn.lock
24+
25+
# test artifacts
26+
*__tmp__

examples/webpack-hot-middleware/server.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const express = require('express');
22
const webpack = require('webpack');
3-
const path = require('path');
43
const config = require('./webpack.config.js');
54
const compiler = webpack(config);
65

jest.config.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module.exports = {
2+
globalSetup: '<rootDir>/jest-global-setup.js',
3+
globalTeardown: '<rootDir>/jest-global-teardown.js',
4+
modulePaths: [],
5+
rootDir: 'test',
6+
testEnvironment: '<rootDir>/jest-environment.js',
7+
testMatch: ['<rootDir>/**/*.test.js'],
8+
watchPlugins: ['jest-watch-typeahead/filename', 'jest-watch-typeahead/testname'],
9+
};

package.json

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@
3232
"types"
3333
],
3434
"scripts": {
35+
"test": "node scripts/test.js",
3536
"lint": "eslint --report-unused-disable-directives --ext .js .",
3637
"lint:fix": "yarn lint --fix",
3738
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
3839
"format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,md}\"",
3940
"generate-types": "tsc -p tsconfig.json && rimraf \"types/{helpers,runtime}\" && yarn format",
41+
"postinstall": "yarn link && yarn link \"@pmmmwh/react-refresh-webpack-plugin\"",
4042
"prepublishOnly": "rimraf types && yarn generate-types"
4143
},
4244
"dependencies": {
@@ -48,20 +50,34 @@
4850
"schema-utils": "^2.6.5"
4951
},
5052
"devDependencies": {
53+
"@babel/core": "^7.9.6",
5154
"@types/json-schema": "^7.0.4",
5255
"@types/node": "^13.11.1",
56+
"@types/puppeteer": "^2.1.0",
5357
"@types/webpack": "^4.41.11",
58+
"babel-loader": "^8.1.0",
59+
"cross-spawn": "^7.0.2",
5460
"eslint": "^6.8.0",
5561
"eslint-config-prettier": "^6.10.1",
62+
"fs-extra": "^9.0.0",
63+
"get-port": "^5.1.1",
64+
"jest": "^26.0.1",
65+
"jest-environment-node": "^26.0.1",
66+
"jest-watch-typeahead": "^0.6.0",
67+
"nanoid": "^3.1.7",
68+
"postinstall-postinstall": "^2.1.0",
5669
"prettier": "^2.0.4",
70+
"puppeteer": "^3.0.4",
5771
"react-refresh": "^0.8.1",
5872
"rimraf": "^3.0.2",
5973
"type-fest": "^0.13.1",
6074
"typescript": "^3.8.3",
6175
"webpack": "^4.42.1",
76+
"webpack-cli": "^3.3.11",
6277
"webpack-dev-server": "^3.11.0",
6378
"webpack-hot-middleware": "^2.25.0",
64-
"webpack-plugin-serve": "^1.0.0"
79+
"webpack-plugin-serve": "^1.0.0",
80+
"yn": "^4.0.0"
6581
},
6682
"peerDependencies": {
6783
"@types/webpack": "^4.41.12",

scripts/test.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Setup environment before any code -
2+
// this makes sure everything coming after will run in the correct env.
3+
process.env.NODE_ENV = 'test';
4+
5+
// Crash on unhandled rejections instead of failing silently.
6+
process.on('unhandledRejection', (error) => {
7+
throw error;
8+
});
9+
10+
const jest = require('jest');
11+
const yn = require('yn');
12+
13+
let argv = process.argv.slice(2);
14+
15+
if (yn(process.env.CI)) {
16+
// Force headless mode in CI environments
17+
process.env.HEADLESS = 'true';
18+
19+
// Use CI mode
20+
argv.push('--ci');
21+
// Parallelized puppeteer tests have high memory overhead in CI environments.
22+
// Fall back to run in series so tests will run faster.
23+
argv.push('--runInBand');
24+
}
25+
26+
if (yn(process.env.DEBUG)) {
27+
argv.push('--verbose');
28+
}
29+
30+
void jest.run(argv);

0 commit comments

Comments
 (0)