angularjs - 单元测试私有(private)方法

标签 angularjs unit-testing typescript

在 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/

相关文章:

typescript - ngClass 可以在 Angular 2 中使用三元运算符吗?

javascript - AngularJS 多维数组

android - 什么是系统测试?

node.js - 单元测试 Express 中间件的正确方法

TypeScript 扩展接口(interface)/类型的所有值类型

TypeScript 条件类型提示类型不可分配

node.js - Express js 路由无法按预期使用 MEAN 堆栈

javascript - AngularJS 应用程序 : make pagination take into account the standard filter

html - Angular Material css 泄漏到其他 div

javascript - 对具有回调函数的函数进行单元测试(请求模块)