jest-codemods
Version:
Codemods for migrating test files to Jest
66 lines (65 loc) • 2.82 kB
JavaScript
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 });
}
;