terra-toolkit
Version:
Utilities to help when developing terra modules.
137 lines (106 loc) • 5.47 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _chai = _interopRequireDefault(require("chai"));
var _axeCommand = _interopRequireDefault(require("./TerraCommands/axe-command"));
var _chaiMethods = _interopRequireDefault(require("./TerraCommands/chai-methods"));
var _accessibility = _interopRequireDefault(require("./TerraCommands/accessibility"));
var _visualRegression = _interopRequireDefault(require("./TerraCommands/visual-regression"));
var _validateElement = _interopRequireDefault(require("./TerraCommands/validate-element"));
var _viewportHelpers = _interopRequireDefault(require("./TerraCommands/viewport-helpers"));
var _hideInputCaret = _interopRequireDefault(require("./TerraCommands/hide-input-caret"));
var _logger = _interopRequireDefault(require("../../../scripts/utils/logger"));
/**
* Webdriver.io TerraService
* Provides global access to chia, as well as custom chai assertions.
* Also provides access a global instance of the Terra object which
* provides accessibility and visual regression test steps.
*/
var TerraService = /*#__PURE__*/function () {
function TerraService() {
(0, _classCallCheck2.default)(this, TerraService);
}
(0, _createClass2.default)(TerraService, [{
key: "onPrepare",
value: // eslint-disable-next-line class-methods-use-this
function onPrepare(config) {
_logger.default.log("Running tests against ".concat(_logger.default.emphasis("Selenium ".concat(config.seleniumVersion))), {
context: '[Terra-Toolkit:terra-service]'
});
} // eslint-disable-next-line class-methods-use-this
}, {
key: "before",
value: function before(capabilities) {
/* Add Terra's custom Wdio command for a11y testing. */
global.browser.addCommand('axe', _axeCommand.default);
/* Initialize the Chai assertion library to have more expressive tests. */
_chai.default.config.showDiff = false;
global.expect = _chai.default.expect;
global.should = _chai.default.should();
/* Add Terra's custom Chai assertion helpers for a11y & VR testing. */
_chai.default.Assertion.addMethod('accessible', _chaiMethods.default.accessible);
_chai.default.Assertion.addMethod('matchReference', _chaiMethods.default.matchReference);
/* Add a Terra global with access to Mocha-Chai test helpers. */
global.Terra = {
/* `viewports` provides access Terra's list of test viewports. */
viewports: _viewportHelpers.default.getViewports,
/* `describeViewports` provides a custom Mocha `describe` block for looping test viewports. */
describeViewports: _viewportHelpers.default.describeViewports,
/* `hideInputCaret` hides the blinking input caret that appears in inputs or editable text areas. */
hideInputCaret: _hideInputCaret.default,
/* `validates` provides access to the chai assertions to use in Mocha `it` blocks. */
validates: {
accessibility: _accessibility.default.validatesAccessibility,
screenshot: _visualRegression.default.validatesScreenshot,
element: _validateElement.default.validatesElement
},
/*
* Deprecated: These commands are being replaced by the above `validate` commands used inside a Mocha `it` block.
*
* `it` provides access to Mocha it blocks of test assertions.
*/
it: {
isAccessible: _accessibility.default.itIsAccessible,
matchesScreenshot: _visualRegression.default.itMatchesScreenshot,
validatesElement: _validateElement.default.itValidatesElement
}
};
/* IE driver takes a longer to be ready for browser interactions. */
if (capabilities.browserName === 'internet explorer') {
global.browser.pause(10000);
}
/* Set the viewport size before the spec begins. */
_viewportHelpers.default.setViewport(global.browser.options.formFactor);
}
/*
* To more passively support code splitting in terra dev site, wait for data to load before progressing with the test.
*
* Automatically hides input carets on the page (unless something explicitly sets a caret-color) when the page is loaded or refreshed.
*/
// eslint-disable-next-line class-methods-use-this
}, {
key: "afterCommand",
value: function afterCommand(commandName, args, result, error) {
if ((commandName === 'refresh' || commandName === 'url') && !error) {
try {
// This is only meant as a convenience so failure is not particularly concerning
(0, _hideInputCaret.default)('body');
if (global.browser.isExisting('[data-terra-dev-site-loading]')) {
global.browser.waitUntil(function () {
return global.browser.isExisting('[data-terra-dev-site-content]');
}, global.browser.options.waitforTimeout + 2000, '', 100);
}
} catch (err) {// intentionally blank
// if this fails we don't want to warn because the user can't fix the issue
}
}
}
}]);
return TerraService;
}();
exports.default = TerraService;