src/lib/jasmine/jasmine-wrapper.js
require('../babel-register');
import path from 'path';
import Fiber from 'fibers';
import _ from 'underscore';
import {parseBoolean, parseString } from '../environment-variable-parsers';
import escapeRegExp from '../utils/escape-reg-exp';
import fiberizeJasmineApi from './jasmine-fiberized-api';
import screenshotHelper from '../screenshot-helper';
import booleanHelper from '../boolean-helper';
new Fiber(function runJasmineInFiber() {
const projectDir = process.env.PWD;
const testsDir = process.env['chimp.path'];
process.chdir(testsDir);
const Jasmine = require('jasmine');
const jasmine = new Jasmine();
// Capability to add multiple spec filters
const specFilters = [];
jasmine.env.specFilter = function shouldRunSpec(spec) {
return _.every(specFilters, specFilter => specFilter(spec));
};
jasmine.jasmine.addSpecFilter = function addSpecFilter(filterFn) {
specFilters.push(filterFn);
};
if (parseBoolean(process.env['chimp.watch'])) {
// Only run specs with a watch tag in watch mode
const watchedSpecRegExp = new RegExp(
parseString(process.env['chimp.watchTags']).split(',').map(escapeRegExp).join('|')
);
jasmine.jasmine.addSpecFilter((spec) => watchedSpecRegExp.test(spec.getFullName()));
}
// Capability to capture screenshots
jasmine.jasmine.getEnv().addReporter({
specDone: function(result) {
if (screenshotHelper.shouldTakeScreenshot(result.status)) {
if (booleanHelper.isTruthy(process.env['chimp.saveScreenshotsToDisk'])) {
const affix = result.status !== 'passed' ? ' (failed)' : '';
const fileName = result.fullName + affix;
screenshotHelper.saveScreenshotsToDisk(fileName, projectDir);
}
}
}
});
fiberizeJasmineApi(global);
jasmine.loadConfig(getJasmineConfig());
jasmine.configureDefaultReporter(
JSON.parse(process.env['chimp.jasmineReporterConfig'])
);
jasmine.execute();
}).run();
function getJasmineConfig() {
const jasmineConfig = JSON.parse(process.env['chimp.jasmineConfig']);
if (jasmineConfig.specDir) {
if (!jasmineConfig.spec_dir) {
jasmineConfig.spec_dir = jasmineConfig.specDir;
}
delete jasmineConfig.specDir;
}
if (jasmineConfig.specFiles) {
if (!jasmineConfig.spec_files) {
jasmineConfig.spec_files = jasmineConfig.specFiles;
}
delete jasmineConfig.specFiles;
}
if (!jasmineConfig.helpers) {
jasmineConfig.helpers = [];
}
jasmineConfig.helpers.unshift(
path.relative(jasmineConfig.spec_dir, path.resolve(__dirname, 'jasmine-helpers.js'))
);
return jasmineConfig;
}