- Testing: Switch to Cypress with code coverage
- npm: Add peerDeps
This commit is contained in:
30
cypress/integration/accessibility.js
Normal file
30
cypress/integration/accessibility.js
Normal file
@@ -0,0 +1,30 @@
|
||||
describe('Accessibility', function () {
|
||||
beforeEach(() => {
|
||||
cy.visit('/editor/svg-editor-es.html');
|
||||
cy.injectAxe();
|
||||
});
|
||||
|
||||
// https://www.npmjs.com/package/cypress-axe
|
||||
it('Has no detectable a11y violations on load', () => {
|
||||
// Configure aXe and test the page at initial load
|
||||
cy.configureAxe({
|
||||
// Todo: Reenable when have time to fix
|
||||
// See https://www.deque.com/axe/axe-for-web/documentation/api-documentation/#user-content-parameters-1
|
||||
rules: [{
|
||||
id: 'meta-viewport',
|
||||
enabled: false
|
||||
}]
|
||||
/*
|
||||
branding: {
|
||||
brand: String,
|
||||
application: String
|
||||
},
|
||||
reporter: 'option',
|
||||
checks: [Object],
|
||||
rules: [Object],
|
||||
locale: Object
|
||||
*/
|
||||
});
|
||||
cy.checkA11y();
|
||||
});
|
||||
});
|
||||
50
cypress/integration/ui.js
Normal file
50
cypress/integration/ui.js
Normal file
@@ -0,0 +1,50 @@
|
||||
import {
|
||||
approveStorage, openMainMenu,
|
||||
openEditorPreferences
|
||||
} from '../support/ui-test-helper.js';
|
||||
|
||||
describe('UI tests', function () {
|
||||
beforeEach(() => {
|
||||
cy.visit('/editor/svg-editor.html');
|
||||
// Ensure we test against English regardless of the original locale
|
||||
approveStorage();
|
||||
openEditorPreferences();
|
||||
cy.get('#lang_select').select('en');
|
||||
cy.get('#tool_prefs_save').click();
|
||||
});
|
||||
|
||||
it('Editor - No parameters: Has export button', () => {
|
||||
openMainMenu();
|
||||
cy.get('#tool_export');
|
||||
});
|
||||
|
||||
it('Editor - No parameters: Export button clicking; dialog opens', () => {
|
||||
openMainMenu();
|
||||
cy.get('#tool_export').click();
|
||||
cy.get('#dialog_content select');
|
||||
});
|
||||
|
||||
it('Editor - No parameters: Drag control point of arc path', () => {
|
||||
const randomOffset = () => 2 + Math.round(10 + Math.random() * 40);
|
||||
cy.get('#tool_source').click();
|
||||
|
||||
cy.get('#svg_source_textarea')
|
||||
.type(`<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg">
|
||||
<g class="layer">
|
||||
<title>Layer 1</title>
|
||||
<path d="m187,194a114,62 0 1 0 219,2" fill="#FF0000" stroke="#000000" stroke-width="5"/>
|
||||
</g>
|
||||
</svg>`);
|
||||
cy.get('#tool_source_save').click();
|
||||
cy.get('#svg_1').click().click();
|
||||
|
||||
cy.get('#pathpointgrip_0').trigger('mousedown', {which: 1})
|
||||
.trigger('mousemove', randomOffset(), randomOffset())
|
||||
.trigger('mouseup', {force: true});
|
||||
cy.get('#pathpointgrip_1').trigger('mousedown', {which: 1})
|
||||
.trigger('mousemove', randomOffset(), randomOffset())
|
||||
.trigger('mouseup', {force: true});
|
||||
|
||||
cy.get('#svg_1[d]').should('not.contain', 'NaN');
|
||||
});
|
||||
});
|
||||
28
cypress/plugins/index.js
Normal file
28
cypress/plugins/index.js
Normal file
@@ -0,0 +1,28 @@
|
||||
/* globals module, require */
|
||||
/* eslint-disable import/no-commonjs */
|
||||
|
||||
// ***********************************************************
|
||||
// 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 codeCoverageTask = require('@cypress/code-coverage/task.js');
|
||||
|
||||
module.exports = (on, config) => {
|
||||
// `on` is used to hook into various events Cypress emits
|
||||
// `config` is the resolved Cypress config
|
||||
|
||||
// `on` is used to hook into various events Cypress emits
|
||||
// `config` is the resolved Cypress config
|
||||
|
||||
// https://docs.cypress.io/guides/tooling/code-coverage.html#Install-the-plugin
|
||||
on('task', codeCoverageTask);
|
||||
};
|
||||
25
cypress/support/commands.js
Normal file
25
cypress/support/commands.js
Normal file
@@ -0,0 +1,25 @@
|
||||
// ***********************************************
|
||||
// This example commands.js shows you how to
|
||||
// create various custom commands and overwrite
|
||||
// existing commands.
|
||||
//
|
||||
// For more comprehensive examples of custom
|
||||
// commands please read more here:
|
||||
// https://on.cypress.io/custom-commands
|
||||
// ***********************************************
|
||||
//
|
||||
//
|
||||
// -- This is a parent command --
|
||||
// Cypress.Commands.add("login", (email, password) => { ... })
|
||||
//
|
||||
//
|
||||
// -- This is a child command --
|
||||
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
|
||||
//
|
||||
//
|
||||
// -- This is a dual command --
|
||||
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
|
||||
//
|
||||
//
|
||||
// -- This will overwrite an existing command --
|
||||
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
|
||||
44
cypress/support/index.js
Normal file
44
cypress/support/index.js
Normal file
@@ -0,0 +1,44 @@
|
||||
// ***********************************************************
|
||||
// This example support/index.js is processed and
|
||||
// loaded automatically before your test files.
|
||||
//
|
||||
// This is a great place to put global configuration and
|
||||
// behavior that modifies Cypress.
|
||||
//
|
||||
// You can change the location of this file or turn off
|
||||
// automatically serving support files with the
|
||||
// 'supportFile' configuration option.
|
||||
//
|
||||
// You can read more here:
|
||||
// https://on.cypress.io/configuration
|
||||
// ***********************************************************
|
||||
|
||||
// Import commands.js using ES2015 syntax:
|
||||
import './commands.js';
|
||||
|
||||
// Alternatively you can use CommonJS syntax:
|
||||
// require('./commands')
|
||||
|
||||
/**
|
||||
* FIDDLE
|
||||
* Adds "cy.runExample()" custom command
|
||||
* Accets test object property (or array thereof):
|
||||
* Required: `test`
|
||||
* Optional: `html`, `name`, `description`
|
||||
* With `testExamples` only: `skip` and `only`
|
||||
* @see https://github.com/cypress-io/cypress-fiddle
|
||||
* @example import {testExamples} from '@cypress/fiddle';
|
||||
*/
|
||||
import '@cypress/fiddle';
|
||||
|
||||
/**
|
||||
* COVERAGE
|
||||
* @see https://docs.cypress.io/guides/tooling/code-coverage.html#Install-the-plugin
|
||||
*/
|
||||
import '@cypress/code-coverage/support.js';
|
||||
|
||||
/**
|
||||
* ACCESSIBILITY
|
||||
* @see https://www.npmjs.com/package/cypress-axe
|
||||
*/
|
||||
import 'cypress-axe';
|
||||
13
cypress/support/ui-test-helper.js
Normal file
13
cypress/support/ui-test-helper.js
Normal file
@@ -0,0 +1,13 @@
|
||||
export const approveStorage = () => {
|
||||
return cy.get('#dialog_buttons > input[type=button][data-ok]')
|
||||
.click();
|
||||
};
|
||||
|
||||
export const openMainMenu = () => {
|
||||
return cy.get('#main_icon').click();
|
||||
};
|
||||
|
||||
export const openEditorPreferences = () => {
|
||||
openMainMenu();
|
||||
return cy.get('#tool_prefs_option').click();
|
||||
};
|
||||
Reference in New Issue
Block a user