我正在开发一个使用nextJS的项目。 NextJs将把react import语句注入忽略它的react组件中。该项目还使用jest和ts-jest进行测试。测试失败是由于缺少被测模块中的反应导入以及该模块导入的模块。我的解决方案是编写一个Typescript转换器以注入react导入,您可以在jest.config.js文件中提供它。这是我的变压器,
const {
createImportDeclaration,
createImportClause,
createIdentifier,
createLiteral,
isImportDeclaration,
updateSourceFileNode,
visitNode,
} = require('typescript');
function createVisitor(sf, _) {
// console.log('********pre transform******\n', sf);
const hasReactImport = (node) => {
const nodeText = node.getText(sf);
const isReactImport = isImportDeclaration(node) && nodeText.includes('react');
let result = isReactImport;
node.forEachChild((child) => {
result = result || hasReactImport(child);
});
return result;
};
const injectReactImport = () => {
return updateSourceFileNode(sf, [
createImportDeclaration(
/*decorators*/ undefined,
/*modifiers*/ undefined,
createImportClause(createIdentifier('React'), undefined),
createLiteral('react')
),
...sf.statements,
]);
};
return (node) => {
if (hasReactImport(node)) return sf;
const file = injectReactImport();
console.log('********post transform******\n', file.imports);
return file;
};
}
function factory() {
return (ctx) => (sf) => visitNode(sf, createVisitor(sf, ctx));
}
module.exports = { factory };
此行具有
console.log('********post transform******\n', file.imports);
打印出文件的导入,但它打印出转换之前已经存在的相同导入。我没有任何错误。不知道我在做什么错。