Skip to content

Commit 7f0c42e

Browse files
Jest + Playwright Testing (docsifyjs#1276)
* Initial Jest+Playwright setup * Fix eslint warnings * Add placeholder for common options * Fix load order of scriptURLs * Add docsifyURL and waitForSelector options * Add executeScript scenarios * Enable firefox and webkit tests by default * Prevent prettier from reformatting browsers list * Update options and add JSDoc comments * Initial commit * Complete initial example tests * Minor tweaks * Change suite name * Rename file * Add npm script to run jest+playwright example test * Clean up server properties * Isolate e2e, integration, and unit test environments - Setup projects for e2e, integration, and unit tests in Jest configuration - Setup /tests/e2e/ tests for Jest+PlayWright - Setup /tests/integration/ tests for Jest - Setup /tests/unit/ tests for Jest - Setup eslint for Jest and Jest+Playwright environments - Move e2e configuration files into separate folder - Update e2e example tests - Update unit example tests - Update HTML fixtures * Update docsifyInit helper - Add `debug` option - Append `Markdown` suffix to markdown-related options - Reorder options alphabetically * Add jestPlaywright.debug() to e2e examples * Removed need to pass page as arg to docsifyInit() * Add VSCode debug configurations * Change test server port from 8080 to 3001 * Clean up test names and expect() order * Update npm scripts to ignore example tests * Add CLI commands and resources section * Add Jest unit test snapshot example * Added Jest unit and e2e tests to Github workflows * Add npm script to run Jest examples Added for new devs who are exploring the examples, as the need for passing --testPathIgnorePatterns is not obvious. This flag is required because the example tests are excluded by default. * Remove node 10.x and add 14.x from tests Required for jest+playwright testitng * Temporarily disable testPathIgnorePatterns for ci * Temporarily remove node 14 from matrix Cypress fails on node 14.x * Alternate workflow setup for new test env * Update workflow platforms and node versions Also cleaning up naming * Restoring original workflow names * Remove Cypress tests * Remove/Reset GitHub actions * Restore/reset workflows * Bump actions/checkout@v1 to v2 * Use playright GH action * Update playwright GH action configuration * Remove unnecessary steps and update checkout version * Add install step * Add --ignore-scripts flag Linting does not require running scripts automatically executred after install. * Swicth from ci to i for install * Add new Build & Test workflow * Add OS tests * Wait for network idle for more reliable ready state * Configure image snapshot testing and add example * Remove example fixture file * Adjust image snapshot threshold for local & CI tests * Upload diff-output artifact * Add failure() check to upload-artifact * Bump image snapshot threshold for local & CI tests * Set diffDirection * Fix XHR caching in playwright tests * Update image snapshot example and theshold * Bump image snapshot threshold for local & CI tests * Remove old workflows * Bump image snapshot threshold for local & CI tests * Bump image snapshot failureThreshold for local & CI tests * Set failureThresholdType to percent * Change image snapshot comparisonMethod to ssim * Remove pixelMatch options (incompatible with ssim) * Bump image snapshot failureThreshold * Bump image snapshot failureThreshold * Disable fast-fail to allow all checks to complete * Rename workflow * Disable fast-fail to allow all checks to complete * Store pixel and ssim comparison configs * Add link to image snapshot test * Fix CI errors on Windows due to image size mismatch * Attempt to fix macos e2e exit code 134 issue * Update test.yml * Update test.yml * Update test.yml * Fix --ci flag * Set Jets to use --runInBand for macOS e2e * Remove unnecessary macOS check * Set image snapshot to runInProcess (macOS CI fix) * Update test.yml * Temporary failureThreshold change for debugging * Upload os+node-specific diff artifacts * Remove node version from diff artifact * Revert "Remove node version from diff artifact" This reverts commit 9cfcc43. * Revert "Revert "Remove node version from diff artifact"" This reverts commit ad6c189. * Restoring failureThreshold after debugging * Remove runInProcess option * Revert "Remove runInProcess option" This reverts commit 667ed6c. * Add node-specific artifact uploads * Set ssim mode to fast and restore runInProcess * Set failureThreshold to 0.01 * Updating to playwright@next for webkit fix * Restore optimal ssim configuration * Testing pixel vs. ssim image comparison * Move shared test setup to unit/int/e2e setups * Refactor test server setup * Replace live-server with browser-sync * Update script for running local docs site - Only init GA plugin on public site - Only init Gitter plugin on public site - Only init Matomo plugin on public site NOTE: Large diff is a result of initial Prettier formatting. Actual change limited to last <script> block on page. * Allow launching test server preview with --start * Add integration tests and refactor unit + e2e * Unify docsifyInit() and cleanup - Create unified docsifyInit() for jest and playwright - Move shared helpers to /tests/helpers - Update tests - Update globals * Fixed webkit routes by specifying ContentType * Update snapshot * Update dependencies * Update tests to use unified docsifyInit() * Remove Cypress (old e2e test environment) * Update tests to run (unit/integration/e2e) - Add new integration tests (Jest) - Remove old unit tests (mocha+jsdom) - Remove old e2e tests (Cypress) * Remove Cypress-related dependency * Remove mocha+chai+jsdom (old unit/int test env) * Rename testing directories and scripts - Rename /tests/ directory to /test/ - Rename script/task names by removing “jest” identifier - Remove “test:jest-examples” script * - Configure test server for availability with all tests (previously e2e only) - Create identical docsifyInit() tests using Jest (integration) and Playwright (e2e) - Update docsifyInit() to convert relative URLs to absolute URLs to work in both JSDOM and Playwright - Update docsifyInit() to append style- and js-related tags using createElement instead of insertAdjacentHTML - Update paths in test files to use unified docsifyInit() - Added option to docsifyInit() to enable/disable formatted HTML output to console - Removed vue.css as default docsify theme from docsifyInit() - Removed outdated files * Reorganize test files * Fix basePath option * Replace do-mock-ajax with xhr-mock - Allows mocking all XMLHttpRequests instead of just those initiated via /src/core/fetch/ajax.js - Allows JSDOM tests to use /lib/docsify.js instead of /src/core/index.js (same as Playwright tests) - Allows JSDOM tests to use /docs site as test content * Added new waitFor helpers * Clean up globals - Import globals from various files instead of manually adding them to ensure they are availability in Jest and eslint configurations - Add middleware to server configuration for serving virtual “_blank.html” file - Add BLANK_URL - Rename TEST_URL to TEST_HOST - Removed ./test/fixtures/ directory (blank page now served via server.js middleware) - Added page.goto(BLANK_URL) call to global Playwright beforeEach() setup * Add try/catch for waitForFunction callback * Move playwright config into jest.config.js * Add runInBand option to tests for reliability * Remove unnecessary XHR Mock teardown * Add —runInBand to test script * Merge develop * Cleanup - Relocate carbon plugin script with other scripts - Update zh-cn docs URL to align with other translatins (GitHub, not jsdelivr) - Add major version locks to URLs * Removed fixed host value from docs * Updated test after merge (docsify version change) * Added startPath for manual instance * Remove Node 10 from CI tests * Remove Node 10 from CI lint tests
1 parent 0f3211e commit 7f0c42e

File tree

166 files changed

+15707
-10158
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

166 files changed

+15707
-10158
lines changed

.eslintignore

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ packages/docsify-server-renderer/build.js
33
node_modules
44
build
55
server.js
6-
cypress
76
lib
87
themes
98
build
109
docs/
11-
**/*.md
10+
**/*.md

.eslintrc.js

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ module.exports = {
66
ecmaVersion: 2019,
77
},
88
env: {
9-
jest: true,
109
browser: true,
1110
node: true,
1211
es6: true,

.github/workflows/e2e.yml

-31
This file was deleted.

.github/workflows/lint.yml

+20-21
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
1-
name: Linting Checks
1+
name: Lint
22

3-
on:
3+
on:
44
push:
5-
branches:
6-
- master
7-
- develop
5+
branches:
6+
- master
7+
- develop
88
pull_request:
9-
branches:
10-
- master
11-
- develop
9+
branches:
10+
- master
11+
- develop
1212

1313
jobs:
1414
build:
15-
runs-on: ubuntu-16.04
15+
runs-on: ubuntu-latest
1616
strategy:
17+
fail-fast: false
1718
matrix:
18-
node-version: [10.x, 12.x, 13.x]
19+
node-version: [12.x, 14.x]
1920

2021
steps:
21-
- uses: actions/checkout@v1
22-
- name: Use Node.js ${{ matrix.node-version }}
23-
uses: actions/setup-node@v1
24-
with:
25-
node-version: ${{ matrix.node-version }}
26-
- name: bootstrap
27-
run: npm run bootstrap
28-
- name: Build
29-
run: npm run build
30-
- name: Linting
31-
run: npm run lint
22+
- uses: actions/checkout@v2
23+
- name: Use Node.js ${{ matrix.node-version }}
24+
uses: actions/setup-node@v1
25+
with:
26+
node-version: ${{ matrix.node-version }}
27+
- name: Install
28+
run: npm i --ignore-scripts
29+
- name: Lint
30+
run: npm run lint

.github/workflows/test.yml

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Build & Test
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
- develop
8+
pull_request:
9+
branches:
10+
- master
11+
- develop
12+
13+
jobs:
14+
build:
15+
runs-on: ${{ matrix.os }}
16+
strategy:
17+
fail-fast: false
18+
matrix:
19+
node-version: [12.x, 14.x]
20+
os: ['macos-latest', 'ubuntu-latest', 'windows-latest']
21+
22+
steps:
23+
- uses: actions/checkout@v2
24+
- name: Use Node.js ${{ matrix.node-version }}
25+
uses: actions/setup-node@v1
26+
with:
27+
node-version: ${{ matrix.node-version }}
28+
- name: bootstrap
29+
run: npm run bootstrap
30+
- name: unit tests
31+
run: npm run test:unit -- -ci --runInBand
32+
- name: integration tests
33+
run: npm run test:integration -- -ci --runInBand
34+
- uses: microsoft/[email protected]
35+
- name: e2e tests
36+
run: npm run test:e2e -- --ci --runInBand
37+
- name: Upload artifacts (diff output)
38+
uses: actions/upload-artifact@v2
39+
if: failure()
40+
with:
41+
name: ${{ matrix.os }}-${{ matrix.node-version }}-diff-output
42+
path: ${{ github.workspace }}/test/**/__diff_output__/*

.github/workflows/unit.yml

-31
This file was deleted.

.gitignore

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
*.log
22
.DS_Store
33
.idea
4+
__diff_output__
5+
lib/
46
node_modules
5-
/themes/
6-
/lib/
7-
/cypress/integration/examples
8-
/cypress/fixtures/docs
7+
themes/
98

109
# exceptions
1110
!.gitkeep

.vscode/launch.json

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "node",
9+
"request": "launch",
10+
"name": "Run tests",
11+
"runtimeExecutable": "npm",
12+
"runtimeArgs": ["run-script", "test"],
13+
"console": "integratedTerminal"
14+
},
15+
{
16+
"type": "node",
17+
"request": "launch",
18+
"name": "Run current test file",
19+
"runtimeExecutable": "npm",
20+
"runtimeArgs": ["run-script", "test"],
21+
"args": ["--", "-i", "${relativeFile}", "--testPathIgnorePatterns"],
22+
"console": "integratedTerminal"
23+
},
24+
{
25+
"type": "node",
26+
"request": "launch",
27+
"name": "Run selected test name",
28+
"runtimeExecutable": "npm",
29+
"runtimeArgs": ["run-script", "test"],
30+
"args": [
31+
"--",
32+
"-i",
33+
"${relativeFile}",
34+
"-t",
35+
"${selectedText}",
36+
"--testPathIgnorePatterns"
37+
],
38+
"console": "integratedTerminal"
39+
},
40+
{
41+
"type": "node",
42+
"request": "launch",
43+
"name": "Update current test file snapshot(s)",
44+
"runtimeExecutable": "npm",
45+
"runtimeArgs": ["run-script", "test"],
46+
"args": [
47+
"--",
48+
"-i",
49+
"${relativeFile}",
50+
"--updateSnapshot",
51+
"--testPathIgnorePatterns"
52+
],
53+
"console": "integratedTerminal"
54+
},
55+
{
56+
"type": "node",
57+
"request": "launch",
58+
"name": "Update selected test name snapshot(s)",
59+
"runtimeExecutable": "npm",
60+
"runtimeArgs": ["run-script", "test"],
61+
"args": [
62+
"--",
63+
"-i",
64+
"${relativeFile}",
65+
"-t",
66+
"${selectedText}",
67+
"--updateSnapshot",
68+
"--testPathIgnorePatterns"
69+
],
70+
"console": "integratedTerminal"
71+
}
72+
]
73+
}

babel.config.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module.exports = {
2+
presets: [
3+
[
4+
'@babel/preset-env',
5+
{
6+
targets: {
7+
node: 'current',
8+
},
9+
},
10+
],
11+
],
12+
};

cypress/fixtures/tpl/docs.index.html

-112
This file was deleted.

0 commit comments

Comments
 (0)