首先,我试图对传递给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