在 typescript 中,测试私有(private)方法的最佳方法是什么。在 Angularjs 中测试 Controller 时,有时 Controller 会向 $scope 添加一个属性(函数),如果我不公开该属性,然后分配给 $scope,我可能能够测试它。有没有推荐的方法。
export class MyCtrl{
constructor($scope){
$scope.addProp = (d:string) => {
this.addProp();
}
}
private addProp(){
//...
}
}
最佳答案
一种解决方案是重新构建您的代码,使其更易于测试。您可以创建一个 AddPropProvider
来完成实际工作(更多的实现细节用于测试)并将其传递给 MyCtrl
的构造函数。这就是经典的控制反转策略。
另一个解决方案也许就是将这个功能公开? Private 非常适合隐藏可能更改的实现细节,但也许您知道该函数无论如何都会一直存在。
终于有黑客了。该函数确实存在于 MyCtrl
的实例中,编译器只是不想让您调用它,因为您这么说了。
var m = new MyCtrl();
(<any>m).addProp();
现在,如果您删除或修改 addProp
的签名,该代码仍会编译,因此您失去了类型安全性。在大多数代码中,这都是不好的。但这是单元测试代码,所以我们将尽早轻松地了解中断,所以它并不可怕。
关于angularjs - 单元测试私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23435778/