UNPKG

jest-codemods

Version:

Codemods for migrating test files to Jest

66 lines (65 loc) 2.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = finale; var consts_1 = require("./consts"); var imports_1 = require("./imports"); var line_terminator_1 = __importDefault(require("./line-terminator")); var logger_1 = __importDefault(require("./logger")); var proxyquire_1 = __importDefault(require("./proxyquire")); var quote_style_1 = __importDefault(require("./quote-style")); function detectIncompatiblePackages(fileInfo, j, ast) { ; ['sinon', 'testdouble'].forEach(function (pkg) { if ((0, imports_1.hasRequireOrImport)(j, ast, pkg)) { var msg = "Usage of package \"".concat(pkg, "\" might be incompatible with Jest"); if (pkg === 'sinon') { return (0, logger_1.default)(fileInfo, "".concat(msg, "; it's recommended the sinon transformer is run first")); } (0, logger_1.default)(fileInfo, msg); } }); } function updateJestImports(j, ast, isStandaloneMode, testFunctionName) { if (testFunctionName === void 0) { testFunctionName = 'jest'; } var addRequireOrImportOnce = (0, imports_1.addRequireOrImportOnceFactory)(j, ast); if (isStandaloneMode && !(0, imports_1.hasRequireOrImport)(j, ast, 'expect')) { addRequireOrImportOnce('expect', 'expect'); } ast .find(j.CallExpression, { callee: { type: 'MemberExpression', object: { type: 'Identifier', name: testFunctionName }, property: { name: function (p) { return consts_1.JEST_MOCK_PROPERTIES.has(p); } }, }, }) .forEach(function (path) { var callee = path.node.callee; if (isStandaloneMode) { var mockLocalName = 'mock'; addRequireOrImportOnce(mockLocalName, 'jest-mock'); callee.object = mockLocalName; } else { callee.object = 'jest'; } }); } /** * Exposes the finale shared by all transformers. * @return the ast.toSource that should be returned to jscodeshift. */ function finale(fileInfo, j, ast, transformerOptions, testFunctionName) { var standaloneMode = transformerOptions.standaloneMode; detectIncompatiblePackages(fileInfo, j, ast); updateJestImports(j, ast, standaloneMode, testFunctionName); (0, proxyquire_1.default)(fileInfo, j, ast); // As Recast is not preserving original quoting, we try to detect it, // and default to something sane. var quote = (0, quote_style_1.default)(j, ast) || 'single'; var lineTerminator = (0, line_terminator_1.default)(fileInfo.source); return ast.toSource({ quote: quote, lineTerminator: lineTerminator }); }