index.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import fs from "fs";
  2. import path from "path";
  3. let currentHook;
  4. let currentOptions;
  5. let sourceMapSupport = false;
  6. const registerFile = require.resolve("../lib/node");
  7. const testFile = require.resolve("./__data__/es2015");
  8. const testFileContent = fs.readFileSync(testFile);
  9. jest.mock("pirates", () => {
  10. return {
  11. addHook(hook, opts) {
  12. currentHook = hook;
  13. currentOptions = opts;
  14. return () => {
  15. currentHook = null;
  16. currentOptions = null;
  17. };
  18. },
  19. };
  20. });
  21. jest.mock("source-map-support", () => {
  22. return {
  23. install() {
  24. sourceMapSupport = true;
  25. },
  26. };
  27. });
  28. const defaultOptions = {
  29. exts: [".js", ".jsx", ".es6", ".es", ".mjs"],
  30. ignoreNodeModules: false,
  31. };
  32. describe("@babel/register", function() {
  33. let babelRegister;
  34. function setupRegister(config = { babelrc: false }) {
  35. config = {
  36. cwd: path.dirname(testFile),
  37. ...config,
  38. };
  39. babelRegister = require(registerFile);
  40. babelRegister.default(config);
  41. }
  42. function revertRegister() {
  43. if (babelRegister) {
  44. babelRegister.revert();
  45. babelRegister = null;
  46. }
  47. }
  48. afterEach(() => {
  49. revertRegister();
  50. currentHook = null;
  51. currentOptions = null;
  52. sourceMapSupport = false;
  53. jest.resetModules();
  54. });
  55. test("registers hook correctly", () => {
  56. setupRegister();
  57. expect(typeof currentHook).toBe("function");
  58. expect(currentOptions).toEqual(defaultOptions);
  59. });
  60. test("unregisters hook correctly", () => {
  61. setupRegister();
  62. revertRegister();
  63. expect(currentHook).toBeNull();
  64. expect(currentOptions).toBeNull();
  65. });
  66. test("installs source map support by default", () => {
  67. setupRegister();
  68. currentHook("const a = 1;", testFile);
  69. expect(sourceMapSupport).toBe(true);
  70. });
  71. test("installs source map support when requested", () => {
  72. setupRegister({
  73. babelrc: false,
  74. sourceMaps: true,
  75. });
  76. currentHook("const a = 1;", testFile);
  77. expect(sourceMapSupport).toBe(true);
  78. });
  79. test("does not install source map support if asked not to", () => {
  80. setupRegister({
  81. babelrc: false,
  82. sourceMaps: false,
  83. });
  84. currentHook("const a = 1;", testFile);
  85. expect(sourceMapSupport).toBe(false);
  86. });
  87. test("hook transpiles with config", () => {
  88. setupRegister({
  89. babelrc: false,
  90. sourceMaps: false,
  91. plugins: ["@babel/transform-modules-commonjs"],
  92. });
  93. const result = currentHook(testFileContent, testFile);
  94. expect(result).toBe('"use strict";\n\nrequire("assert");');
  95. });
  96. test("hook transpiles with babelrc", () => {
  97. setupRegister({
  98. babelrc: true,
  99. sourceMaps: false,
  100. });
  101. const result = currentHook(testFileContent, testFile);
  102. expect(result).toBe('"use strict";\n\nrequire("assert");');
  103. });
  104. });