UNPKG

creevey

Version:

creevey is a tool for automated visual testing, that tightly integrated with storybook

67 lines (55 loc) 9.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addTestsFromStories = addTestsFromStories; var _mocha = require("mocha"); var _types = require("../../types"); var _stories = require("../../stories"); function findOrCreateSuite(name, parent) { const suite = parent.suites.find(({ title }) => title == name) || new _mocha.Suite(name, parent.ctx); if (!suite.parent) { suite.parent = parent; parent.addSuite(suite); } return suite; } function createTest(name, fn, skip) { const test = new _mocha.Test(name, skip ? undefined : fn); test.pending = Boolean(skip); // NOTE Can't define skip reason in mocha https://github.com/mochajs/mocha/issues/2026 test.skipReason = skip; return test; } function addTest(rootSuite, test) { const [, testName, ...suitePath] = test.path; const suite = suitePath.reduceRight((subSuite, suiteName) => findOrCreateSuite(suiteName, subSuite), rootSuite); const mochaTest = createTest(testName, test.fn, test.skip); suite.addTest(mochaTest); mochaTest.ctx = Object.setPrototypeOf({ id: test.id, story: test.story }, suite.ctx); return mochaTest; } function removeTestOrSuite(testOrSuite) { const { parent } = testOrSuite; if (!parent) return; if (testOrSuite instanceof _mocha.Test) parent.tests = parent.tests.filter(test => test != testOrSuite); if (testOrSuite instanceof _mocha.Suite) parent.suites = parent.suites.filter(suite => suite != testOrSuite); if (parent.tests.length == 0 && parent.suites.length == 0) removeTestOrSuite(parent); } async function addTestsFromStories(rootSuite, browserName, config) { const mochaTestsById = new Map(); const tests = await (0, _stories.loadTestsFromStories)(config, [browserName], testsDiff => Object.entries(testsDiff).forEach(([id, newTest]) => { const oldTest = mochaTestsById.get(id); mochaTestsById.delete(id); if (oldTest) removeTestOrSuite(oldTest); if (newTest) mochaTestsById.set(id, addTest(rootSuite, newTest)); })); Object.values(tests).filter(_types.isDefined).forEach(test => mochaTestsById.set(test.id, addTest(rootSuite, test))); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvd29ya2VyL2hlbHBlcnMudHMiXSwibmFtZXMiOlsiZmluZE9yQ3JlYXRlU3VpdGUiLCJuYW1lIiwicGFyZW50Iiwic3VpdGUiLCJzdWl0ZXMiLCJmaW5kIiwidGl0bGUiLCJTdWl0ZSIsImN0eCIsImFkZFN1aXRlIiwiY3JlYXRlVGVzdCIsImZuIiwic2tpcCIsInRlc3QiLCJUZXN0IiwidW5kZWZpbmVkIiwicGVuZGluZyIsIkJvb2xlYW4iLCJza2lwUmVhc29uIiwiYWRkVGVzdCIsInJvb3RTdWl0ZSIsInRlc3ROYW1lIiwic3VpdGVQYXRoIiwicGF0aCIsInJlZHVjZVJpZ2h0Iiwic3ViU3VpdGUiLCJzdWl0ZU5hbWUiLCJtb2NoYVRlc3QiLCJPYmplY3QiLCJzZXRQcm90b3R5cGVPZiIsImlkIiwic3RvcnkiLCJyZW1vdmVUZXN0T3JTdWl0ZSIsInRlc3RPclN1aXRlIiwidGVzdHMiLCJmaWx0ZXIiLCJsZW5ndGgiLCJhZGRUZXN0c0Zyb21TdG9yaWVzIiwiYnJvd3Nlck5hbWUiLCJjb25maWciLCJtb2NoYVRlc3RzQnlJZCIsIk1hcCIsInRlc3RzRGlmZiIsImVudHJpZXMiLCJmb3JFYWNoIiwibmV3VGVzdCIsIm9sZFRlc3QiLCJnZXQiLCJkZWxldGUiLCJzZXQiLCJ2YWx1ZXMiLCJpc0RlZmluZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxTQUFTQSxpQkFBVCxDQUEyQkMsSUFBM0IsRUFBeUNDLE1BQXpDLEVBQStEO0FBQzdELFFBQU1DLEtBQUssR0FBR0QsTUFBTSxDQUFDRSxNQUFQLENBQWNDLElBQWQsQ0FBbUIsQ0FBQztBQUFFQyxJQUFBQTtBQUFGLEdBQUQsS0FBZUEsS0FBSyxJQUFJTCxJQUEzQyxLQUFvRCxJQUFJTSxZQUFKLENBQVVOLElBQVYsRUFBZ0JDLE1BQU0sQ0FBQ00sR0FBdkIsQ0FBbEU7O0FBQ0EsTUFBSSxDQUFDTCxLQUFLLENBQUNELE1BQVgsRUFB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QUFDQVUsSUFBQUEsY0FBYyxDQUFDUSxNQUFmLENBQXNCbEIsRUFBdEI7QUFDQSxRQUFJZ0IsT0FBSixFQUFhZCxpQkFBaUIsQ0FBQ2MsT0FBRCxDQUFqQjtBQUNiLFFBQUlELE9BQUosRUFBYUwsY0FBYyxDQUFDUyxHQUFmLENBQW1CbkIsRUFBbkIsRUFBdUJYLE9BQU8sQ0FBQ0MsU0FBRCxFQUFZeUIsT0FBWixDQUE5QjtBQUNkLEdBTEQsQ0FEa0IsQ0FBcEI7QUFTQWpCLEVBQUFBLE1BQU0sQ0FBQ3NCLE1BQVAsQ0FBY2hCLEtBQWQsRUFDR0MsTUFESCxDQUNVZ0IsZ0JBRFYsRUFFR1AsT0FGSCxDQUVZL0IsSUFBRCxJQUFVMkIsY0FBYyxDQUFDUyxHQUFmLENBQW1CcEMsSUFBSSxDQUFDaUIsRUFBeEIsRUFBNEJYLE9BQU8sQ0FBQ0MsU0FBRCxFQUFZUCxJQUFaLENBQW5DLENBRnJCO0FBR0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWl0ZSwgQ29udGV4dCwgVGVzdCB9IGZyb20gJ21vY2hhJztcbmltcG9ydCB7IGlzRGVmaW5lZCwgU2VydmVyVGVzdCwgQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9hZFRlc3RzRnJvbVN0b3JpZXMgfSBmcm9tICcuLi8uLi9zdG9yaWVzJztcblxuZnVuY3Rpb24gZmluZE9yQ3JlYXRlU3VpdGUobmFtZTogc3RyaW5nLCBwYXJlbnQ6IFN1aXRlKTogU3VpdGUge1xuICBjb25zdCBzdWl0ZSA9IHBhcmVudC5zdWl0ZXMuZmluZCgoeyB0aXRsZSB9KSA9PiB0aXRsZSA9PSBuYW1lKSB8fCBuZXcgU3VpdGUobmFtZSwgcGFyZW50LmN0eCk7XG4gIGlmICghc3VpdGUucGFyZW50KSB7XG4gICAgc3VpdGUucGFyZW50ID0gcGFyZW50O1xuICAgIHBhcmVudC5hZGRTdWl0ZShzdWl0ZSk7XG4gIH1cbiAgcmV0dXJuIHN1aXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXN0KG5hbWU6IHN0cmluZywgZm46ICh0aGlzOiBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LCBza2lwOiBzdHJpbmcgfCBib29sZWFuKTogVGVzdCB7XG4gIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChuYW1lLCBza2lwID8gdW5kZWZpbmVkIDogZm4pO1xuICB0ZXN0LnBlbmRpbmcgPSBCb29sZWFuKHNraXApO1xuICAvLyBOT1RFIENhbid0IGRlZmluZSBza2lwIHJlYXNvbiBpbiBtb2NoYSBodHRwczovL2dpdGh1Yi5jb20vbW9jaGFqcy9tb2NoYS9pc3N1ZXMvMjAyNlxuICB0ZXN0LnNraXBSZWFzb24gPSBza2lwO1xuICByZXR1cm4gdGVzdDtcbn1cblxuZnVuY3Rpb24gYWRkVGVzdChyb290U3VpdGU6IFN1aXRlLCB0ZXN0OiBTZXJ2ZXJUZXN0KTogVGVzdCB7XG4gIGNvbnN0IFssIHRlc3ROYW1lLCAuLi5zdWl0ZVBhdGhdID0gdGVzdC5wYXRoO1xuICBjb25zdCBzdWl0ZSA9IHN1aXRlUGF0aC5yZWR1Y2VSaWdodCgoc3ViU3VpdGUsIHN1aXRlTmFtZSkgPT4gZmluZE9yQ3JlYXRlU3VpdGUoc3VpdGVOYW1lLCBzdWJTdWl0ZSksIHJvb3RTdWl0ZSk7XG4gIGNvbnN0IG1vY2hhVGVzdCA9IGNyZWF0ZVRlc3QodGVzdE5hbWUsIHRlc3QuZm4sIHRlc3Quc2tpcCk7XG4gIHN1aXRlLmFkZFRlc3QobW9jaGFUZXN0KTtcbiAgbW9jaGFUZXN0LmN0eCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZih7IGlkOiB0ZXN0LmlkLCBzdG9yeTogdGVzdC5zdG9yeSB9LCBzdWl0ZS5jdHgpO1xuICByZXR1cm4gbW9jaGFUZXN0O1xufVxuXG5mdW5jdGlvbiByZW1vdmVUZXN0T3JTdWl0ZSh0ZXN0T3JTdWl0ZTogVGVzdCB8IFN1aXRlKTogdm9pZCB7XG4gIGNvbnN0IHsgcGFyZW50IH0gPSB0ZXN0T3JTdWl0ZTtcbiAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgaWYgKHRlc3RPclN1aXRlIGluc3RhbmNlb2YgVGVzdCkgcGFyZW50LnRlc3RzID0gcGFyZW50LnRlc3RzLmZpbHRlcigodGVzdCkgPT4gdGVzdCAhPSB0ZXN0T3JTdWl0ZSk7XG4gIGlmICh0ZXN0T3JTdWl0ZSBpbnN0YW5jZW9mIFN1aXRlKSBwYXJlbnQuc3VpdGVzID0gcGFyZW50LnN1aXRlcy5maWx0ZXIoKHN1aXRlKSA9PiBzdWl0ZSAhPSB0ZXN0T3JTdWl0ZSk7XG4gIGlmIChwYXJlbnQudGVzdHMubGVuZ3RoID09IDAgJiYgcGFyZW50LnN1aXRlcy5sZW5ndGggPT0gMCkgcmVtb3ZlVGVzdE9yU3VpdGUocGFyZW50KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZFRlc3RzRnJvbVN0b3JpZXMocm9vdFN1aXRlOiBTdWl0ZSwgYnJvd3Nlck5hbWU6IHN0cmluZywgY29uZmlnOiBDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbW9jaGFUZXN0c0J5SWQ6IE1hcDxzdHJpbmcsIFRlc3Q+ID0gbmV3IE1hcCgpO1xuICBjb25zdCB0ZXN0cyA9IGF3YWl0IGxvYWRUZXN0c0Zyb21TdG9yaWVzKGNvbmZpZywgW2Jyb3dzZXJOYW1lXSwgKHRlc3RzRGlmZikgPT5cbiAgICBPYmplY3QuZW50cmllcyh0ZXN0c0RpZmYpLmZvckVhY2goKFtpZCwgbmV3VGVzdF0pID0+IHtcbiAgICAgIGNvbnN0IG9sZFRlc3QgPSBtb2NoYVRlc3RzQnlJZC5nZXQoaWQpO1xuICAgICAgbW9jaGFUZXN0c0J5SWQuZGVsZXRlKGlkKTtcbiAgICAgIGlmIChvbGRUZXN0KSByZW1vdmVUZXN0T3JTdWl0ZShvbGRUZXN0KTtcbiAgICAgIGlmIChuZXdUZXN0KSBtb2NoYVRlc3RzQnlJZC5zZXQoaWQsIGFkZFRlc3Qocm9vdFN1aXRlLCBuZXdUZXN0KSk7XG4gICAgfSksXG4gICk7XG5cbiAgT2JqZWN0LnZhbHVlcyh0ZXN0cylcbiAgICAuZmlsdGVyKGlzRGVmaW5lZClcbiAgICAuZm9yRWFjaCgodGVzdCkgPT4gbW9jaGFUZXN0c0J5SWQuc2V0KHRlc3QuaWQsIGFkZFRlc3Qocm9vdFN1aXRlLCB0ZXN0KSkpO1xufVxuIl19