2018-03-05 10:47:00 +01:00

129 lines
2.7 KiB
JavaScript

import fs from "fs";
let currentHook;
let currentOptions;
let sourceMapSupport = false;
const registerFile = require.resolve("../lib/node");
const testFile = require.resolve("./__data__/es2015");
const testFileContent = fs.readFileSync(testFile);
jest.mock("pirates", () => {
return {
addHook(hook, opts) {
currentHook = hook;
currentOptions = opts;
return () => {
currentHook = null;
currentOptions = null;
};
},
};
});
jest.mock("source-map-support", () => {
return {
install() {
sourceMapSupport = true;
},
};
});
const defaultOptions = {
exts: [".js", ".jsx", ".es6", ".es", ".mjs"],
ignoreNodeModules: false,
};
describe("@babel/register", function() {
let babelRegister;
function setupRegister(config = { babelrc: false }) {
babelRegister = require(registerFile);
babelRegister.default(config);
}
function revertRegister() {
if (babelRegister) {
babelRegister.revert();
babelRegister = null;
}
}
afterEach(() => {
revertRegister();
currentHook = null;
currentOptions = null;
sourceMapSupport = false;
jest.resetModuleRegistry();
});
test("registers hook correctly", () => {
setupRegister();
expect(typeof currentHook).toBe("function");
expect(currentOptions).toEqual(defaultOptions);
});
test("unregisters hook correctly", () => {
setupRegister();
revertRegister();
expect(currentHook).toBeNull();
expect(currentOptions).toBeNull();
});
test("installs source map support by default", () => {
setupRegister();
currentHook("const a = 1;", testFile);
expect(sourceMapSupport).toBe(true);
});
test("installs source map support when requested", () => {
setupRegister({
babelrc: false,
sourceMaps: true,
});
currentHook("const a = 1;", testFile);
expect(sourceMapSupport).toBe(true);
});
test("does not install source map support if asked not to", () => {
setupRegister({
babelrc: false,
sourceMaps: false,
});
currentHook("const a = 1;", testFile);
expect(sourceMapSupport).toBe(false);
});
test("hook transpiles with config", () => {
setupRegister({
babelrc: false,
sourceMaps: false,
plugins: ["@babel/transform-modules-commonjs"],
});
const result = currentHook(testFileContent, testFile);
expect(result).toBe('"use strict";\n\nrequire("assert");');
});
test("hook transpiles with babelrc", () => {
setupRegister({
babelrc: true,
sourceMaps: false,
});
const result = currentHook(testFileContent, testFile);
expect(result).toBe('"use strict";\n\nrequire("assert");');
});
});