UNPKG

orionsoft-react-scripts

Version:

Orionsoft Configuration and scripts for Create React App.

146 lines (113 loc) 4.46 kB
/** * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * */ 'use strict'; const JasmineReporter = require('./reporter'); const jasmineAsync = require('./jasmine-async'); const fs = require('graceful-fs'); const path = require('path'); const vm = require('vm'); const JASMINE_PATH = require.resolve('../vendor/jasmine-2.4.1.js'); const JASMINE_CHECK_PATH = require.resolve('./jasmine-check'); const jasmineScript = new vm.Script(fs.readFileSync(JASMINE_PATH, 'utf8'), { displayErrors: true, filename: JASMINE_PATH }); function jasmine2( config, environment, runtime, testPath) { const reporter = new JasmineReporter(config, environment, testPath); environment.runScript(jasmineScript); const requireJasmine = environment.global.jasmineRequire; const jasmine = requireJasmine.core(requireJasmine); const env = jasmine.getEnv(); const jasmineInterface = requireJasmine.interface(jasmine, env); Object.assign(environment.global, jasmineInterface); env.addReporter(jasmineInterface.jsApiReporter); jasmineAsync.install(environment.global); environment.global.test = environment.global.it; environment.global.it.only = environment.global.fit; environment.global.test.only = environment.global.fit; environment.global.it.skip = environment.global.xit; environment.global.test.skip = environment.global.xit; environment.global.xtest = environment.global.xit; environment.global.context = environment.global.describe; environment.global.xcontext = environment.global.xdescribe; environment.global.context.skip = environment.global.xdescribe; environment.global.describe.skip = environment.global.xdescribe; environment.global.describe.only = environment.global.fdescribe; if (!jasmine || !env) { throw new Error('jasmine2 could not be initialized by Jest'); } runtime.setMock( '', 'jest-check', () => { const jasmineCheck = runtime.requireInternalModule(JASMINE_CHECK_PATH); return jasmineCheck(environment.global, config.testcheckOptions); }, { virtual: true }); env.beforeEach(() => { if (config.resetModules) { runtime.resetModules(); } if (config.clearMocks) { runtime.clearAllMocks(); } }); env.addReporter(reporter); // `jest-matchers` should be required inside test environment (vm). // Otherwise if they throw, the `Error` class will differ from the `Error` // class of the test and `error instanceof Error` will return `false`. runtime.requireInternalModule( path.resolve(__dirname, './extendJasmineExpect.js'))(); const snapshotState = runtime.requireInternalModule( path.resolve(__dirname, './setup-jest-globals.js'))( { testPath, config }); if (config.setupTestFrameworkScriptFile) { runtime.requireModule(config.setupTestFrameworkScriptFile); } if (config.timers === 'fake') { environment.fakeTimers.useFakeTimers(); } if (config.testNamePattern) { const testNameRegex = new RegExp(config.testNamePattern); env.specFilter = spec => testNameRegex.test(spec.getFullName()); } runtime.requireModule(testPath); env.execute(); return reporter. getResults(). then(results => addSnapshotData(results, config, snapshotState)); } const addSnapshotData = (results, config, snapshotState) => { results.testResults.forEach((_ref) => {let fullName = _ref.fullName;let status = _ref.status; if (status === 'pending' || status === 'failed') { // if test is skipped or failed, we don't want to mark // its snapshots as obsolete. snapshotState.markSnapshotsAsCheckedForTest(fullName); } }); const updateSnapshot = config.updateSnapshot; const uncheckedCount = snapshotState.getUncheckedCount(); if (updateSnapshot) { snapshotState.removeUncheckedKeys(); } const status = snapshotState.save(updateSnapshot); results.snapshot.fileDeleted = status.deleted; results.snapshot.added = snapshotState.added; results.snapshot.matched = snapshotState.matched; results.snapshot.unmatched = snapshotState.unmatched; results.snapshot.updated = snapshotState.updated; results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; return results; }; module.exports = jasmine2;