测试模块化代码的一个不幸的事情是,有时你必须导出东西来测试它们。这会污染您的代码,并且还会降低编译器或 linter 上的"未使用变量"标志等重要功能的价值 - 如果您删除应用程序中的用法,则测试中可能仍有用法。
一种可能的解决方案是类似于"弱引用"的东西,其中测试代码将引用它正在测试的东西,但带有明确的"linter,编译器:请不要将此引用视为用法"标志。
我检查了tsc
标志和tslint
配置文档,但没有看到任何东西。A( 我错过了什么吗?B(这是一个好主意吗,实施起来有多难?
(其他解决方案就不那么好了。例如,您无法导出内容,然后使用rewire
对模块进行内省以获取私有内容。我的理解是,TSC将无法遵循这样的参考。
感谢您的帮助。
将它们分离到不同的模块中,这样您就可以更轻松地对其进行测试。假设您有以下用例。
function a () {/* implementation */}
export function b () {
//... code
a()
//..code
}
如果"A"位于不同的模块上,并且由"B"要求,则您的测试可以直接要求该模块。对模块 ('b'( 依赖项使用控制反转也可能很有用。这将允许您注入模拟/间谍并更好地测试它。在我们的 a/b 示例中,它应该看起来像这样。
import {a} from './a'
export function CreateB(aFunc:a = a){
return function b(){
//..code
aFunc()
//..code
}
}
如果您提供更具体的例子,我可能会提供更多帮助。