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 commit 9cfcc4342b.

* Revert "Revert "Remove node version from diff artifact""

This reverts commit ad6c1891e4.

* Restoring failureThreshold after debugging

* Remove runInProcess option

* Revert "Remove runInProcess option"

This reverts commit 667ed6c870.

* 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
This commit is contained in:
John Hildenbiddle 2020-10-05 14:10:30 -05:00 committed by GitHub
parent 0f3211ee77
commit 7f0c42eda5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
166 changed files with 11889 additions and 6340 deletions

View File

@ -3,9 +3,8 @@ packages/docsify-server-renderer/build.js
node_modules
build
server.js
cypress
lib
themes
build
docs/
**/*.md
**/*.md

View File

@ -6,7 +6,6 @@ module.exports = {
ecmaVersion: 2019,
},
env: {
jest: true,
browser: true,
node: true,
es6: true,

View File

@ -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

View File

@ -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

42
.github/workflows/test.yml vendored Normal file
View File

@ -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__/*

View File

@ -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

7
.gitignore vendored
View File

@ -1,11 +1,10 @@
*.log
.DS_Store
.idea
__diff_output__
lib/
node_modules
/themes/
/lib/
/cypress/integration/examples
/cypress/fixtures/docs
themes/
# exceptions
!.gitkeep

73
.vscode/launch.json vendored Normal file
View File

@ -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"
}
]
}

12
babel.config.js Normal file
View File

@ -0,0 +1,12 @@
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};

View File

@ -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>

View File

@ -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');
})
});

View File

@ -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');
})
});

View File

@ -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();
});
});
});
});

View File

@ -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)

View File

@ -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)
}

View File

@ -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()

Some files were not shown because too many files have changed in this diff Show More