Jest + Playwright Testing (#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 commit9cfcc4342b
. * Revert "Revert "Remove node version from diff artifact"" This reverts commitad6c1891e4
. * Restoring failureThreshold after debugging * Remove runInProcess option * Revert "Remove runInProcess option" This reverts commit667ed6c870
. * 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
|
@ -3,9 +3,8 @@ packages/docsify-server-renderer/build.js
|
|||
node_modules
|
||||
build
|
||||
server.js
|
||||
cypress
|
||||
lib
|
||||
themes
|
||||
build
|
||||
docs/
|
||||
**/*.md
|
||||
**/*.md
|
||||
|
|
|
@ -6,7 +6,6 @@ module.exports = {
|
|||
ecmaVersion: 2019,
|
||||
},
|
||||
env: {
|
||||
jest: true,
|
||||
browser: true,
|
||||
node: true,
|
||||
es6: true,
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
name: Testing the e2e test suites
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-16.04
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [10.x, 12.x, 13.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: bootstrap
|
||||
run: npm run bootstrap
|
||||
- name: Build
|
||||
run: npm run build
|
||||
- name: end to end
|
||||
run: npm run test:e2e
|
|
@ -1,31 +1,30 @@
|
|||
name: Linting Checks
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [10.x, 12.x, 13.x]
|
||||
node-version: [12.x, 14.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: bootstrap
|
||||
run: npm run bootstrap
|
||||
- name: Build
|
||||
run: npm run build
|
||||
- name: Linting
|
||||
run: npm run lint
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Install
|
||||
run: npm i --ignore-scripts
|
||||
- name: Lint
|
||||
run: npm run lint
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
name: Build & Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [12.x, 14.x]
|
||||
os: ['macos-latest', 'ubuntu-latest', 'windows-latest']
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: bootstrap
|
||||
run: npm run bootstrap
|
||||
- name: unit tests
|
||||
run: npm run test:unit -- -ci --runInBand
|
||||
- name: integration tests
|
||||
run: npm run test:integration -- -ci --runInBand
|
||||
- uses: microsoft/playwright-github-action@v1.3.0
|
||||
- name: e2e tests
|
||||
run: npm run test:e2e -- --ci --runInBand
|
||||
- name: Upload artifacts (diff output)
|
||||
uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ matrix.os }}-${{ matrix.node-version }}-diff-output
|
||||
path: ${{ github.workspace }}/test/**/__diff_output__/*
|
|
@ -1,31 +0,0 @@
|
|||
name: Unit tests Suite
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-16.04
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [10.x, 12.x, 13.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: bootstrap
|
||||
run: npm run bootstrap
|
||||
- name: Build
|
||||
run: npm run build
|
||||
- name: Unit tests
|
||||
run: npm run test
|
|
@ -1,11 +1,10 @@
|
|||
*.log
|
||||
.DS_Store
|
||||
.idea
|
||||
__diff_output__
|
||||
lib/
|
||||
node_modules
|
||||
/themes/
|
||||
/lib/
|
||||
/cypress/integration/examples
|
||||
/cypress/fixtures/docs
|
||||
themes/
|
||||
|
||||
# exceptions
|
||||
!.gitkeep
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Run tests",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": ["run-script", "test"],
|
||||
"console": "integratedTerminal"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Run current test file",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": ["run-script", "test"],
|
||||
"args": ["--", "-i", "${relativeFile}", "--testPathIgnorePatterns"],
|
||||
"console": "integratedTerminal"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Run selected test name",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": ["run-script", "test"],
|
||||
"args": [
|
||||
"--",
|
||||
"-i",
|
||||
"${relativeFile}",
|
||||
"-t",
|
||||
"${selectedText}",
|
||||
"--testPathIgnorePatterns"
|
||||
],
|
||||
"console": "integratedTerminal"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Update current test file snapshot(s)",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": ["run-script", "test"],
|
||||
"args": [
|
||||
"--",
|
||||
"-i",
|
||||
"${relativeFile}",
|
||||
"--updateSnapshot",
|
||||
"--testPathIgnorePatterns"
|
||||
],
|
||||
"console": "integratedTerminal"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Update selected test name snapshot(s)",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": ["run-script", "test"],
|
||||
"args": [
|
||||
"--",
|
||||
"-i",
|
||||
"${relativeFile}",
|
||||
"-t",
|
||||
"${selectedText}",
|
||||
"--updateSnapshot",
|
||||
"--testPathIgnorePatterns"
|
||||
],
|
||||
"console": "integratedTerminal"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
module.exports = {
|
||||
presets: [
|
||||
[
|
||||
'@babel/preset-env',
|
||||
{
|
||||
targets: {
|
||||
node: 'current',
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
|
@ -1,112 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>docsify-e2e-tests</title>
|
||||
<link rel="icon" href="_media/favicon.ico" />
|
||||
<meta name="google-site-verification" content="6t0LoIeFksrjF4c9sqUEsVXiQNxLp2hgoqo0KryT-sE" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="keywords" content="doc,docs,documentation,gitbook,creator,generator,github,jekyll,github-pages" />
|
||||
<meta name="description" content="A magical documentation generator." />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" />
|
||||
<link rel="stylesheet" href="lib/themes/vue.css" title="vue" />
|
||||
<link rel="stylesheet" href="lib/themes/dark.css" title="dark" disabled />
|
||||
<link rel="stylesheet" href="lib/themes/buble.css" title="buble" disabled />
|
||||
<link rel="stylesheet" href="lib/themes/pure.css" title="pure" disabled />
|
||||
<style>
|
||||
nav.app-nav li ul {
|
||||
min-width: 100px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">Loading Docsify e2e tests suite...</div>
|
||||
<script>
|
||||
window.$docsify = {
|
||||
alias: {
|
||||
'.*?/awesome':
|
||||
'https://raw.githubusercontent.com/docsifyjs/awesome-docsify/master/README.md',
|
||||
'/changelog':
|
||||
'https://raw.githubusercontent.com/docsifyjs/docsify/master/CHANGELOG.md',
|
||||
'/.*/_navbar.md': '/_navbar.md',
|
||||
'/zh-cn/(.*)':
|
||||
'https://raw.githubusercontent.com/docsifyjs/docs-zh/master/$1',
|
||||
'/de-de/(.*)':
|
||||
'https://raw.githubusercontent.com/docsifyjs/docs-de/master/$1',
|
||||
'/ru/(.*)':
|
||||
'https://raw.githubusercontent.com/docsifyjs/docs-ru/master/$1',
|
||||
'/es/(.*)':
|
||||
'https://raw.githubusercontent.com/docsifyjs/docs-es/master/$1'
|
||||
},
|
||||
fallbackLanguages: ['es'],
|
||||
auto2top: true,
|
||||
coverpage: true,
|
||||
executeScript: true,
|
||||
loadSidebar: true,
|
||||
loadNavbar: true,
|
||||
mergeNavbar: true,
|
||||
maxLevel: 4,
|
||||
subMaxLevel: 2,
|
||||
ga: 'UA-106147152-1',
|
||||
matomo: {
|
||||
host: '//matomo.thunderwave.de',
|
||||
id: 6
|
||||
},
|
||||
name: 'docsify',
|
||||
search: {
|
||||
noData: {
|
||||
'/de-de/': 'Keine Ergebnisse!',
|
||||
'/zh-cn/': '没有结果!',
|
||||
'/': 'No results!'
|
||||
},
|
||||
paths: 'auto',
|
||||
placeholder: {
|
||||
'/de-de/': 'Suche',
|
||||
'/zh-cn/': '搜索',
|
||||
'/': 'Search'
|
||||
}
|
||||
},
|
||||
formatUpdated: '{MM}/{DD} {HH}:{mm}',
|
||||
plugins: [
|
||||
function (hook, vm) {
|
||||
hook.beforeEach(function (html) {
|
||||
if (/githubusercontent\.com/.test(vm.route.file)) {
|
||||
url = vm.route.file
|
||||
.replace('raw.githubusercontent.com', 'github.com')
|
||||
.replace(/\/master/, '/blob/master')
|
||||
} else {
|
||||
url =
|
||||
'https://github.com/docsifyjs/docsify/blob/master/docs/' +
|
||||
vm.route.file
|
||||
}
|
||||
var editHtml = '[:memo: Edit Document](' + url + ')\n'
|
||||
return (
|
||||
editHtml +
|
||||
html +
|
||||
'\n\n----\n\n' +
|
||||
'<a href="https://docsify.js.org" target="_blank" style="color: inherit; font-weight: normal; text-decoration: none;">Powered by docsify</a>'
|
||||
)
|
||||
})
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
<script src="lib/docsify.min.js"></script>
|
||||
<script src="lib/plugins/search.min.js"></script>
|
||||
<script src="lib/plugins/ga.min.js"></script>
|
||||
<script src="lib/plugins/matomo.min.js"></script>
|
||||
<script src="//unpkg.com/prismjs/components/prism-bash.min.js"></script>
|
||||
<script src="//unpkg.com/prismjs/components/prism-markdown.min.js"></script>
|
||||
<script src="//unpkg.com/prismjs/components/prism-nginx.min.js"></script>
|
||||
|
||||
<script>
|
||||
; ((window.gitter = {}).chat = {}).options = {
|
||||
room: 'docsifyjs/Lobby'
|
||||
}
|
||||
</script>
|
||||
<script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,9 +0,0 @@
|
|||
context('config.fallbackLanguages', () => {
|
||||
it('fallbacks respecting aliases', () => {
|
||||
cy.visit('http://localhost:3000/#/es/');
|
||||
|
||||
cy.get('.sidebar-nav').contains('Changelog').click();
|
||||
|
||||
cy.get('#main').should('contain', 'Bug Fixes');
|
||||
})
|
||||
});
|
|
@ -1,17 +0,0 @@
|
|||
context('sidebar.search', () => {
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
});
|
||||
|
||||
it('search list',()=>{
|
||||
cy.get(':input[type=search]')
|
||||
|
||||
.type("npm i -g now")
|
||||
|
||||
.should('have.value', 'npm i -g now');
|
||||
|
||||
cy.get(
|
||||
'.results-panel>.matching-post p>em'
|
||||
). should('contain', 'npm i -g now');
|
||||
})
|
||||
});
|
|
@ -1,343 +0,0 @@
|
|||
context('sidebar.configurations', () => {
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
});
|
||||
|
||||
const quickStartIds = [
|
||||
'initialize',
|
||||
'writing-content',
|
||||
'preview-your-site',
|
||||
'manual-initialization',
|
||||
'loading-dialog',
|
||||
];
|
||||
quickStartIds.forEach(id => {
|
||||
it('go to #quickstart?id=' + id, () => {
|
||||
cy.get(
|
||||
'.sidebar-nav > :nth-child(1) > :nth-child(1) > ul > :nth-child(1) > a'
|
||||
).click();
|
||||
|
||||
cy.get(`a.section-link[href='#/quickstart?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const configurationIds = [
|
||||
'el',
|
||||
'repo',
|
||||
'maxlevel',
|
||||
'loadnavbar',
|
||||
'loadsidebar',
|
||||
'hidesidebar',
|
||||
'submaxlevel',
|
||||
'auto2top',
|
||||
'homepage',
|
||||
'basepath',
|
||||
'relativepath',
|
||||
'coverpage',
|
||||
'logo',
|
||||
'name',
|
||||
'namelink',
|
||||
'markdown',
|
||||
'themecolor',
|
||||
'alias',
|
||||
'autoheader',
|
||||
'executescript',
|
||||
'noemoji',
|
||||
'mergenavbar',
|
||||
'formatupdated',
|
||||
'externallinktarget',
|
||||
'cornerexternallinktarget',
|
||||
'externallinkrel',
|
||||
'routermode',
|
||||
'nocompilelinks',
|
||||
'onlycover',
|
||||
'requestheaders',
|
||||
'ext',
|
||||
'fallbacklanguages',
|
||||
'notfoundpage',
|
||||
];
|
||||
configurationIds.forEach(id => {
|
||||
it('go to #configuration?id=' + id, () => {
|
||||
cy.get('[href="#/configuration"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/configuration?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500); // its more far from the cover
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const morePagesIds = [
|
||||
'sidebar',
|
||||
'nested-sidebars',
|
||||
'set-page-titles-from-sidebar-selection',
|
||||
'table-of-contents',
|
||||
'ignoring-subheaders',
|
||||
];
|
||||
morePagesIds.forEach(id => {
|
||||
it('go to #more-pages?id=' + id, () => {
|
||||
cy.get('[href="#/more-pages"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/more-pages?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const customNavbarIds = [
|
||||
'html',
|
||||
'markdown',
|
||||
'nesting',
|
||||
'combining-custom-navbars-with-the-emoji-plugin',
|
||||
];
|
||||
customNavbarIds.forEach(id => {
|
||||
it('go to #custom-navbar?id=' + id, () => {
|
||||
cy.get('[href="#/custom-navbar"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/custom-navbar?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const coverIds = [
|
||||
'basic-usage',
|
||||
'custom-background',
|
||||
'coverpage-as-homepage',
|
||||
'multiple-covers',
|
||||
];
|
||||
coverIds.forEach(id => {
|
||||
it('go to #cover?id=' + id, () => {
|
||||
cy.get('[href="#/cover"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/cover?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const themesIds = ['other-themes'];
|
||||
themesIds.forEach(id => {
|
||||
it('go to #themes?id=' + id, () => {
|
||||
cy.get('[href="#/themes"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/themes?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const pluginsIds = [
|
||||
'full-text-search',
|
||||
'google-analytics',
|
||||
'emoji',
|
||||
'external-script',
|
||||
'zoom-image',
|
||||
'edit-on-github',
|
||||
'demo-code-with-instant-preview-and-jsfiddle-integration',
|
||||
'copy-to-clipboard',
|
||||
'disqus',
|
||||
'gitalk',
|
||||
'pagination',
|
||||
'tabs',
|
||||
'more-plugins',
|
||||
];
|
||||
pluginsIds.forEach(id => {
|
||||
it('go to #plugins?id=' + id, () => {
|
||||
cy.get('[href="#/plugins"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/plugins?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const writeAPluginIds = ['full-configuration', 'example', 'tips'];
|
||||
writeAPluginIds.forEach(id => {
|
||||
it('go to #write-a-plugin?id=' + id, () => {
|
||||
cy.get('[href="#/write-a-plugin"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/write-a-plugin?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const markdownIds = ['supports-mermaid'];
|
||||
markdownIds.forEach(id => {
|
||||
it('go to #markdown?id=' + id, () => {
|
||||
cy.get('[href="#/markdown"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/markdown?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('go to #Language-highlight', () => {
|
||||
cy.get('a[href="#/language-highlight"]')
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
|
||||
// const deployIds = [
|
||||
// 'github-pages',
|
||||
// 'gitlab-pages',
|
||||
// 'firebase-hosting',
|
||||
// 'vps',
|
||||
// 'netlify',
|
||||
// 'zeit-now',
|
||||
// 'aws-amplify'
|
||||
// ]
|
||||
// deployIds.forEach(id => {
|
||||
// it('go to #deploy?id=' + id, () => {
|
||||
// cy.get('[href="#/deploy"]').click()
|
||||
|
||||
// cy.get(`a.section-link[href='#/deploy?id=${id}']`)
|
||||
// .click()
|
||||
// .then(() => {
|
||||
// cy.wait(500)
|
||||
// cy.matchImageSnapshot()
|
||||
// })
|
||||
// })
|
||||
// })
|
||||
|
||||
const helpersIds = [
|
||||
'important-content',
|
||||
'general-tips',
|
||||
'ignore-to-compile-link',
|
||||
'set-target-attribute-for-link',
|
||||
'disable-link',
|
||||
'github-task-lists',
|
||||
'customise-id-for-headings',
|
||||
'markdown-in-html-tag',
|
||||
];
|
||||
helpersIds.forEach(id => {
|
||||
it('go to #helpers?id=' + id, () => {
|
||||
cy.get('[href="#/helpers"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/helpers?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const vueIds = ['basic-usage', 'combine-vuep-to-write-playground'];
|
||||
vueIds.forEach(id => {
|
||||
it('go to #vue?id=' + id, () => {
|
||||
cy.get('[href="#/vue"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/vue?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const cdnIds = [
|
||||
'latest-version',
|
||||
'specific-version',
|
||||
'compressed-file',
|
||||
'other-cdn',
|
||||
];
|
||||
cdnIds.forEach(id => {
|
||||
it('go to #cdn?id=' + id, () => {
|
||||
cy.get('[href="#/cdn"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/cdn?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const pwaIds = ['create-serviceworker', 'register', 'enjoy-it'];
|
||||
pwaIds.forEach(id => {
|
||||
it('go to #pwa?id=' + id, () => {
|
||||
cy.get('[href="#/pwa"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/pwa?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const ssrIds = [
|
||||
'why-ssr',
|
||||
'quick-start',
|
||||
'custom-template',
|
||||
'configuration',
|
||||
'deploy-for-your-vps',
|
||||
];
|
||||
|
||||
ssrIds.forEach(id => {
|
||||
it('go to #ssr?id=' + id, () => {
|
||||
cy.get('[href="#/ssr"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/ssr?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
const embedFilesIds = [
|
||||
'embedded-file-type',
|
||||
'embedded-code-fragments',
|
||||
'tag-attribute',
|
||||
'the-code-block-highlight',
|
||||
];
|
||||
embedFilesIds.forEach(id => {
|
||||
it('go to #embed-files?id=' + id, () => {
|
||||
cy.get('[href="#/embed-files"]').click();
|
||||
|
||||
cy.get(`a.section-link[href='#/embed-files?id=${id}']`)
|
||||
.click()
|
||||
.then(() => {
|
||||
cy.wait(500);
|
||||
cy.matchImageSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,13 +0,0 @@
|
|||
const path = require('path')
|
||||
const LiveServer = require('live-server')
|
||||
|
||||
const fixturePath = path.join(__dirname, './fixtures/docs')
|
||||
const args = process.argv.slice(2)
|
||||
console.log('[e2e tests] : args passed to live server', args)
|
||||
const params = {
|
||||
port: args[0] || 3000,
|
||||
root: args[1] || fixturePath,
|
||||
open: false
|
||||
// NoBrowser: true
|
||||
}
|
||||
LiveServer.start(params)
|
|
@ -1,18 +0,0 @@
|
|||
// ***********************************************************
|
||||
// This example plugins/index.js can be used to load plugins
|
||||
//
|
||||
// You can change the location of this file or turn off loading
|
||||
// the plugins file with the 'pluginsFile' configuration option.
|
||||
//
|
||||
// You can read more here:
|
||||
// https://on.cypress.io/plugins-guide
|
||||
// ***********************************************************
|
||||
|
||||
// This function is called when a project is opened or re-opened (e.g. due to
|
||||
// the project's config changing)
|
||||
const { addMatchImageSnapshotPlugin } = require('cypress-image-snapshot/plugin')
|
||||
module.exports = (on, config) => {
|
||||
// `on` is used to hook into various events Cypress emits
|
||||
// `config` is the resolved Cypress config
|
||||
addMatchImageSnapshotPlugin(on, config)
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
const copyDir = require('copy-dir')
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
const { spawn } = require('child_process')
|
||||
|
||||
const setup = async () => {
|
||||
const PORT = process.env.PORT || 3000
|
||||
global.__LIVESERVER__ = null
|
||||
global.PORT = PORT
|
||||
|
||||
/**
|
||||
* IN this test suite, we are going to test our docs site with all the css,js linked to our local build packages
|
||||
*
|
||||
* 1.1 Copy ../docs --> ./fixtures/docs
|
||||
* 1.2 copy lib,themes --> ./fixtures/
|
||||
* 2. change the content of fixtures/docs/index.html to use all the links from our local build
|
||||
* 3. now jest runner will run to test all the *.spec.js files
|
||||
*
|
||||
*/
|
||||
|
||||
const shippedDirs = ['lib', 'themes']
|
||||
|
||||
// 1
|
||||
const docsPath = path.join(process.cwd(), './docs')
|
||||
const fixtureDocsPath = path.join(__dirname, './fixtures/docs')
|
||||
|
||||
// 1.1
|
||||
console.log('[cypress test docs] Copying the docs --> cypress/fixtures/docs')
|
||||
copyDir.sync(docsPath, fixtureDocsPath)
|
||||
|
||||
// 1.2
|
||||
shippedDirs.forEach(dir => {
|
||||
const fromPath = path.join(process.cwd(), dir)
|
||||
const toPath = path.join(__dirname, `./fixtures/docs/${dir}`)
|
||||
console.log(
|
||||
`[cypress test docs] Copying ${dir} --> cypress/fixtures/docs/${dir}`
|
||||
)
|
||||
copyDir.sync(fromPath, toPath)
|
||||
})
|
||||
|
||||
// 2
|
||||
console.log(
|
||||
'[cypress test docs] Replacing content the tpl/index.html --> cypress/fixtures/docs/index.html'
|
||||
)
|
||||
const indexHTMLtplPath = path.join(
|
||||
__dirname,
|
||||
'./fixtures/tpl/docs.index.html'
|
||||
)
|
||||
const fixtureIndexPath = path.join(__dirname, './fixtures/docs/index.html')
|
||||
const data = fs.readFileSync(indexHTMLtplPath, 'utf8')
|
||||
|
||||
// 3
|
||||
const fixturePath = path.join(__dirname, './fixtures/docs')
|
||||
|
||||
fs.writeFileSync(fixtureIndexPath, data, 'utf8')
|
||||
const child = spawn('node', [
|
||||
path.join(__dirname, './live.server.js'),
|
||||
PORT,
|
||||
fixturePath
|
||||
])
|
||||
child.on('exit', code => {
|
||||
console.log(`Child process exited with code ${code}`)
|
||||
})
|
||||
child.stdout.on('data', data => {
|
||||
console.log(`stdout: ${data}`)
|
||||
})
|
||||
child.stderr.on('data', data => {
|
||||
console.log(`stderr: ${data}`)
|
||||
})
|
||||
|
||||
// LiveServer.start(params)
|
||||
global.__LIVESERVER__ = child
|
||||
}
|
||||
|
||||
setup()
|
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 90 KiB |