bsr*_*bsr 5 unit-testing angularjs typescript
在打字稿中,测试私有方法的最佳方法是什么.在Angularjs中测试控制器时,有时控制器会向$ scope添加一个属性(函数),如果我不公开该属性,那么分配给$ scope,我可以测试它.有推荐的方式吗?
export class MyCtrl{
constructor($scope){
$scope.addProp = (d:string) => {
this.addProp();
}
}
private addProp(){
//...
}
}
Run Code Online (Sandbox Code Playgroud)
一种解决方案是重新构建代码,使其更易于测试.您可以创建一个AddPropProvider执行实际工作(实现详细信息,以便进行测试)并将其传递给构造函数MyCtrl.这是控制策略的经典倒置.
另一种解决方案可能就是将该功能公之于众?Private是隐藏可能改变的实现细节的理想选择,但也许你知道函数总是会在那里.
最后是黑客攻击.该函数确实存在于实例上,MyCtrl并且编译器只是不希望您调用它,因为您这样说.
var m = new MyCtrl();
(<any>m).addProp();
Run Code Online (Sandbox Code Playgroud)
现在,如果删除或修改该addProp代码的签名仍然会编译,那么您就失去了类型安全性.在大多数代码中都会很糟糕.但这是单元测试代码,因此我们将尽早及轻松地了解休息,因此它并不可怕.