小编Sea*_*ean的帖子

测试传递给Angular Material Dialog实例的控制器

首先,我试图对传递给Angular Material Dialog实例的控制器进行单元测试.

作为一般性问题,单独测试这样的控制器或实际调用$mdDialog.show()是否更有意义?

我正在尝试第一种方法,但我遇到了一些问题,主要与Angular Material如何将"locals"绑定到控制器有关.

这是我用来在源代码中调用对话框的代码,它按预期工作:

$mdDialog.show({
    controller: 'DeviceDetailController',
    controllerAs: 'vm',
    locals: {deviceId: "123"},
    bindToController: true,
    templateUrl: 'admin/views/deviceDetail.html',
    parent: angular.element(document.body),
    targetEvent: event
});
Run Code Online (Sandbox Code Playgroud)

我不相信文档已经更新,但是从版本0.9.0开始,在调用构造函数时控制器可以使用本地文件(请参阅Github上的这个问题).这是一个被测试的控制器构造函数的精简版本,因此您可以看到为什么我需要传递变量并在控制器"实例化"时可用:

function DeviceDetailController(devicesService) {
    var vm = this;

    vm.device = {};
//    vm.deviceId = null;           //this field is injected when the dialog is created, if there is one. For some reason I can't pre-assign it to null.

    activate();

    //////////
    function activate() {
        if (vm.deviceId != null) {
            loadDevice(); …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing angularjs karma-jasmine angular-material

6
推荐指数
1
解决办法
1409
查看次数