Skip to content

Commit e743f42

Browse files
committed
chore: 添加测试工具jest和puppeteer
1 parent f13faec commit e743f42

File tree

7 files changed

+1852
-35
lines changed

7 files changed

+1852
-35
lines changed

.eslintrc.js

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ module.exports = {
3737
'class-methods-use-this': 'off',
3838
'no-unused-expressions': 'off',
3939
'import/prefer-default-export': 'off',
40+
'import/no-extraneous-dependencies': 'off',
4041
'@typescript-eslint/explicit-function-return-type': 'off',
4142
'@typescript-eslint/no-non-null-assertion': 'off',
4243
'react/jsx-filename-extension': 'off',

jest.config.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module.exports = {
2+
preset: 'jest-puppeteer',
3+
setupFilesAfterEnv: [
4+
'./jest.setup.js',
5+
],
6+
transform: {
7+
'^.+\\.tsx?$': 'ts-jest',
8+
},
9+
};

jest.setup.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jest.setTimeout(10000);

package.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,19 @@
77
"build": "rm -rf ./dist && webpack --config webpack.prod.js",
88
"dev": "webpack-dev-server --config webpack.dev.js --open",
99
"lint": "eslint --ext .ts,.tsx src/ --fix",
10+
"test": "jest",
1011
"clean": "rm -rf ./node_modules"
1112
},
1213
"keywords": [],
1314
"author": "Yijie Zou",
1415
"license": "ISC",
1516
"devDependencies": {
1617
"@types/classnames": "^2.2.9",
18+
"@types/expect-puppeteer": "^3.3.2",
1719
"@types/history": "^4.7.3",
20+
"@types/jest": "^24.0.19",
21+
"@types/jest-environment-puppeteer": "^4.3.1",
22+
"@types/puppeteer": "^1.20.2",
1823
"@types/react": "^16.9.2",
1924
"@types/react-dom": "^16.9.0",
2025
"@types/react-router-dom": "^5.1.0",
@@ -32,9 +37,13 @@
3237
"eslint-plugin-react-hooks": "^1.7.0",
3338
"file-loader": "^4.2.0",
3439
"html-webpack-plugin": "^3.2.0",
40+
"jest": "^24.9.0",
41+
"jest-puppeteer": "^4.3.0",
3542
"less": "^3.10.3",
3643
"less-loader": "^5.0.0",
44+
"puppeteer": "^1.20.0",
3745
"style-loader": "^1.0.0",
46+
"ts-jest": "^24.1.0",
3847
"ts-loader": "^6.1.2",
3948
"typescript": "^3.6.3",
4049
"webpack": "^4.40.2",
@@ -50,7 +59,6 @@
5059
"mobx": "^5.14.0",
5160
"mobx-react": "^6.1.3",
5261
"mobx-react-router": "^4.0.7",
53-
"puppeteer": "^1.20.0",
5462
"react": "^16.9.0",
5563
"react-dom": "^16.9.0",
5664
"react-inlinesvg": "^1.1.7",

src/test/index.test.ts

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
beforeAll(async () => {
2+
await page.goto('http://localhost:3000');
3+
});
4+
5+
describe('Home page', () => {
6+
it('page should be titled spring', async () => {
7+
const title = await page.title();
8+
expect(title).toBe('Spring');
9+
});
10+
11+
it('page should have a logo', async () => {
12+
const logo = await page.$eval('h1', (e) => e.innerHTML);
13+
expect(logo).toBe('Spring');
14+
});
15+
});
16+
17+
describe('Login Form', () => {
18+
it('form should be rendered', async () => {
19+
const formTitle = await page.$eval('.login__title', (e) => e.innerHTML);
20+
expect(formTitle).toBe('Log in');
21+
});
22+
23+
it('login button should be active', async () => {
24+
await page.focus('#EMAIL');
25+
await page.type('#EMAIL', 'seimc1228');
26+
await page.focus('#PASSWORD');
27+
await page.type('#PASSWORD', 'seimc1228_password');
28+
const buttonClass = await page.$eval('.login button', (e) => e.className);
29+
expect(buttonClass.indexOf('btn__disabled')).toBe(-1);
30+
});
31+
32+
it('can log in', async () => {
33+
await page.$eval('.login button', (e: HTMLButtonElement) => e.click());
34+
await page.waitForNavigation();
35+
const url = page.url();
36+
expect(url.indexOf('/user') > 0).toBe(true);
37+
});
38+
});

tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"allowSyntheticDefaultImports": true,
1010
"esModuleInterop": true,
1111
"experimentalDecorators": true,
12+
"types": ["node", "jest-environment-puppeteer"],
1213
"baseUrl": ".",
1314
"paths": {
1415
"@/*": ["src/*"]

0 commit comments

Comments
 (0)