typescript - 如何在不发出 js 文件的情况下用 jest 测试非导出的打字稿函数
问题描述
我有一些我想开玩笑测试的非导出函数。在 JavaScript 中,我会使用rewire。为了使用 rewire 测试 TypeScript,您将rewire()
调用指向发出的 JavaScript 文件而不是 TypeScript 文件。
但是,我使用 webpack 来编译我的 TS,所以在我的 tsconfig.json 中,我有{ compilerOptions: { noEmit: true } }
,并且没有发出的文件指向 rewire。
如何测试我的非导出函数?
解决方案
我想出了一个不太理想但比导出更好的解决方法。
jest.config.js
module.exports = {
// ...
globals: {
TEST: true,
// ...
}
};
全球.d.ts
export {};
declare global {
const TEST: boolean;
// ...
}
webpack.config.js
const { DefinePlugin } = require('webpack');
module.exports = {
// ...
plugins: [
new DefinePlugin({ TEST: 'false' })
]
};
我的模块.ts
function myNonExportedFunction() {
// ...
}
if (TEST) {
module.exports.myNonExportedFunction = myNonExportedFunction;
}
__tests__/module.ts
const { myNonExportedFunction } = require('../my-module');
test('myNonExportedFunction', () => {
// ...
});
这种方法的两个缺点是:
您在生产代码中包含最少的测试代码(尽管 webpack 可以删除基于常量的代码)
你失去了你的非导出函数的强类型,尽管你失去了重新连接的类型安全性
推荐阅读
- perl - 如何比较嵌套哈希
- bash - 如何命令 curl 下载到 stderr
- vba - 如何在 VB 中处理此运行时类型不匹配错误?
- c - 如何将反向字符串函数从主函数转换为自己的独立函数?
- git - 如何使用 diff-cover 针对分支的特定提交 ID 生成覆盖率报告?
- java - 有没有办法以编程方式定义 MToolbarElements 在 MToolBar 中的位置?
- php - Nova actionable_id 不能为空
- wpf - 复杂的 WPF 组合框
- testing - 评估软件架构/测试软件属性(如“可扩展性”)的最佳方法,无需具体说明?
- c++ - qInstallMessageHandler 不接受公共方法作为参数