cypress-image-diff-js
Version:
Visual regression testing tool with cypress
163 lines (146 loc) • 6.87 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _fsExtra = require("fs-extra");
var _utils = require("./utils");
var _utils2 = require("./utils.browser");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
jest.mock('fs-extra', function () {
return _objectSpread(_objectSpread({}, jest.requireActual('fs-extra')), {}, {
existsSync: jest.fn(),
mkdirSync: jest.fn(),
emptyDirSync: jest.fn(),
readdirSync: jest.fn(),
moveSync: jest.fn(),
copySync: jest.fn(),
writeFile: jest.fn()
});
});
describe('Utils', function () {
var args = ['some/path'];
var sampleFiles = ['test.png', 'test1.png'];
afterEach(function () {
jest.clearAllMocks();
});
describe('Create dir', function () {
it('should trigger create directory function when path doesn\'t exist', function () {
_fsExtra.existsSync.mockReturnValue(false);
(0, _utils.createDir)(args);
expect(_fsExtra.existsSync).toHaveBeenCalledTimes(1);
expect(_fsExtra.mkdirSync).toHaveBeenCalledTimes(1);
expect(_fsExtra.mkdirSync).toBeCalledWith(args[0], {
"recursive": true
});
});
it('should not trigger create directory function when path exists', function () {
_fsExtra.existsSync.mockReturnValue(true);
(0, _utils.createDir)(args);
expect(_fsExtra.existsSync).toHaveBeenCalledTimes(1);
expect(_fsExtra.mkdirSync).toHaveBeenCalledTimes(0);
});
});
describe('Clean dir', function () {
it('should trigger clean directory function when path exists', function () {
_fsExtra.existsSync.mockReturnValue(true);
_fsExtra.readdirSync.mockReturnValue(sampleFiles);
(0, _utils.cleanDir)(args);
expect(_fsExtra.existsSync).toHaveBeenCalledTimes(1);
expect(_fsExtra.emptyDirSync).toHaveBeenCalledTimes(1);
});
it('should not trigger clean directory function when path doesn\'t exist', function () {
_fsExtra.existsSync.mockReturnValue(false);
(0, _utils.cleanDir)(args);
expect(_fsExtra.existsSync).toHaveBeenCalledTimes(1);
expect(_fsExtra.emptyDirSync).toHaveBeenCalledTimes(0);
});
});
describe('Move files', function () {
it('should move files', function () {
(0, _utils.renameAndMoveFile)(sampleFiles[0], sampleFiles[1]);
expect(_fsExtra.moveSync).toHaveBeenCalledTimes(1);
expect(_fsExtra.moveSync).toBeCalledWith(sampleFiles[0], sampleFiles[1], {
"overwrite": true
});
});
});
describe('Copy files', function () {
it('should copy files', function () {
(0, _utils.renameAndCopyFile)(sampleFiles[0], sampleFiles[1]);
expect(_fsExtra.copySync).toHaveBeenCalledTimes(1);
expect(_fsExtra.copySync).toBeCalledWith(sampleFiles[0], sampleFiles[1], {
"overwrite": true
});
});
});
describe('Get relative path from the current working directory', function () {
var processCwd = jest.spyOn(process, 'cwd');
var fakeCwd = 'User/my-project/';
beforeEach(function () {
processCwd.mockReturnValue(fakeCwd);
});
it('should return empty string when path doesn\'t exist', function () {
_fsExtra.existsSync.mockReturnValue(false);
var relativePath = (0, _utils.getRelativePathFromCwd)('User/my-project/cypress/screenshot.png');
expect(relativePath).toBe('');
});
it('should return a relative path when given path exists', function () {
_fsExtra.existsSync.mockReturnValue(true);
var relativePath = (0, _utils.getRelativePathFromCwd)('User/my-project/cypress/screenshot.png');
expect(relativePath).toBe('cypress/screenshot.png');
});
});
describe('Get clean date string', function () {
afterEach(function () {
jest.restoreAllMocks();
});
it('should return a clean date string', function () {
var fakeDate = '01/09/2023, 23:22:48';
jest.spyOn(Date.prototype, 'toLocaleString').mockReturnValue(fakeDate);
expect((0, _utils.getCleanDate)()).toBe('01-09-2023_232248');
});
});
describe('Write incremented filename', function () {
var filename = 'User/my-project/report.json';
var filenameIncremented = 'User/my-project/report_2.json';
var fakeData = '{\n "name": "test"\n}';
it('should create a new file with given name when no filename found', function () {
_fsExtra.existsSync.mockReturnValue(false);
(0, _utils.writeFileIncrement)(filename, fakeData);
expect(_fsExtra.writeFile).toHaveBeenCalledTimes(1);
expect(_fsExtra.writeFile).toBeCalledWith(filename, fakeData);
});
it('should increment filename when it already exists', function () {
_fsExtra.existsSync.mockReturnValueOnce(true).mockReturnValueOnce(false);
(0, _utils.writeFileIncrement)(filename, fakeData);
expect(_fsExtra.writeFile).toHaveBeenCalledTimes(1);
expect(_fsExtra.writeFile).toBeCalledWith(filenameIncremented, fakeData);
});
});
describe('getFileName', function () {
it('should replace placeholders correctly', function () {
var template = '[browserName]/[givenName]-[specName]-[width]x[height].js';
var result = (0, _utils2.getFileName)({
nameTemplate: template,
givenName: 'test',
specName: 'example.spec.js',
browserName: 'chrome',
width: 1280,
height: 720
});
expect(result).toBe('chrome/test-example.spec-1280x720.js');
});
it('should remove special characters correctly', function () {
var template = '[givenName]-[specName]-[browserName]-[width]x[height].js';
var result = (0, _utils2.getFileName)({
nameTemplate: template,
givenName: 'test$123',
specName: 'spec file.js',
browserName: 'safari',
width: 800,
height: 600
});
expect(result).toBe('test123-specfile-safari-800x600.js');
});
});
});
;