Skip to content
This repository was archived by the owner on Feb 18, 2024. It is now read-only.

Support options for jest and karma presets in v9 #1081

Merged
merged 2 commits into from
Sep 7, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/jest/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"@neutrinojs/compile-loader": "9.0.0-0",
"@neutrinojs/loader-merge": "9.0.0-0",
"babel-plugin-jest-hoist": "^23.0.0",
"deepmerge": "^1.5.2",
"eslint-plugin-jest": "^21.21.0",
"lodash.omit": "^4.5.0"
},
Expand Down
13 changes: 7 additions & 6 deletions packages/jest/src/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
const loaderMerge = require('@neutrinojs/loader-merge');
const { merge } = require('@neutrinojs/compile-loader');
const compileLoader = require('@neutrinojs/compile-loader');
const merge = require('deepmerge');
const omit = require('lodash.omit');
const { basename, isAbsolute, join, relative } = require('path');
const { media, style } = require('neutrino/extensions');

module.exports = neutrino => {
module.exports = (neutrino, options = {}) => {
neutrino.config.when(neutrino.config.module.rules.has('lint'), () => {
neutrino.use(loaderMerge('lint', 'eslint'), {
plugins: ['jest'],
Expand All @@ -25,7 +26,7 @@ module.exports = neutrino => {
neutrino.config.module
.rule('compile')
.use('babel')
.tap(options => merge(options, {
.tap(options => compileLoader.merge(options, {
plugins: [
// Once babel-preset-jest has better Babel 7 support we should
// switch back to it (or even use babel-jest, which will allow
Expand All @@ -43,7 +44,7 @@ module.exports = neutrino => {
}

const babelOptions = usingBabel
? merge(
? compileLoader.merge(
omit(
neutrino.config.module.rule('compile').use('babel').get('options'),
['cacheDirectory']
Expand Down Expand Up @@ -76,7 +77,7 @@ module.exports = neutrino => {
const modulesConfig = neutrino.config.resolve.modules.values();
const aliases = neutrino.config.resolve.alias.entries() || {};

return {
return merge({
rootDir: root,
moduleDirectories: modulesConfig.length ? modulesConfig : ['node_modules'],
moduleFileExtensions: neutrino.config.resolve.extensions
Expand Down Expand Up @@ -112,6 +113,6 @@ module.exports = neutrino => {
globals: {
BABEL_OPTIONS: babelOptions
}
};
}, options);
});
};
9 changes: 8 additions & 1 deletion packages/jest/test/jest_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ test('loads middleware', t => {
});

test('uses middleware', t => {
const api = new Neutrino();

t.notThrows(() => {
const api = new Neutrino();
api.use(mw());
});
});
Expand Down Expand Up @@ -66,3 +67,9 @@ test('exposes jest method', t => {
test('exposes jest config from method', t => {
t.is(typeof neutrino(mw()).jest(), 'object');
});

test('uses middleware with options', t => {
const config = neutrino([mw(), { testEnvironment: 'node' }]).jest();

t.is(config.testEnvironment, 'node');
});
6 changes: 3 additions & 3 deletions packages/karma/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const merge = require('deepmerge');
const omit = require('lodash.omit');
const { join } = require('path');

module.exports = neutrino => {
module.exports = (neutrino, options = {}) => {
if (neutrino.config.module.rules.has('lint')) {
neutrino.use(loaderMerge('lint', 'eslint'), {
envs: ['mocha']
Expand All @@ -24,7 +24,7 @@ module.exports = neutrino => {
const tests = join(neutrino.options.tests, '**/*_test.js');
const sources = join(neutrino.options.source, '**/*.js*');

config.set({
config.set(merge({
basePath: neutrino.options.root,
browsers: [process.env.CI ? 'ChromeCI' : 'ChromeHeadless'],
customLaunchers: {
Expand Down Expand Up @@ -80,7 +80,7 @@ module.exports = neutrino => {
{ type: 'lcov', subdir: 'report-lcov' }
]
}
});
}, options));

return config;
});
Expand Down
19 changes: 19 additions & 0 deletions packages/karma/test/karma_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,22 @@ test('exposes karma config from method', t => {

t.is(config, fakeKarma);
});

test('uses middleware with options', t => {
// Karma's config handler returns a function.
// Force evaluation by calling it.
const fakeKarma = new Map();
const config = neutrino([mw(), {
webpackMiddleware: {
stats: {
errors: false
}
}
}]).karma()(fakeKarma);

// Since we are faking out the Karma API with a Map, we need to get the
// object back out of the map and check that the merge happened correctly.
const [options] = [...config][0];

t.is(options.webpackMiddleware.stats.errors, false);
});