Angularjs AngularUI模态控制器单元测试中未找到模拟函数
我使用modals,有这样一个基本控制器:Angularjs AngularUI模态控制器单元测试中未找到模拟函数,angularjs,unit-testing,jasmine,angular-bootstrap,Angularjs,Unit Testing,Jasmine,Angular Bootstrap,我使用modals,有这样一个基本控制器: .controller('DashboardHelpController', ['$scope', '$uibModal', function ($scope, $uibModal) { var dhc = this; dhc.open = function (size, resource) { var modalInstance = $uibModal.open({ templateUrl:
.controller('DashboardHelpController', ['$scope', '$uibModal', function ($scope, $uibModal) {
var dhc = this;
dhc.open = function (size, resource) {
var modalInstance = $uibModal.open({
templateUrl: 'resourcePlayModal.html',
controller: 'ModalInstanceCtrl as mic',
size: size,
resolve: {
resource: function () {
return resource;
}
}
});
};
}])
它调用标准模态实例控制器:
.controller('ModalInstanceCtrl', ['$uibModalInstance', 'resource', function ($uibModalInstance, resource) {
this.resource = resource;
this.cancel = function () {
$uibModalInstance.dismiss();
};
}])
下面是我的单元测试,模仿:
问题是在作用域上找不到取消功能:
预期spy modalInstance.Disclose已通过['cancel'调用
]但从来没有人打过电话
更新:我最初尝试调用cancel
作为函数:
it('should have called the modal dismiss function', function () {
scope.cancel();
expect(modalInstance.dismiss).toHaveBeenCalled();
});
那没用。我上面的代码试图解决原始问题:
TypeError:scope.cancel不是一个函数
在我使用
控制器作为
语法时,事情有点复杂,但这应该是可行的。谢谢您的帮助。作用域。cancel
是一个函数,但您并没有这样调用它
it('should have called the modal dismiss function', function () {
scope.cancel();
expect(modalInstance.dismiss).toHaveBeenCalledWith();
});
此外,scope.cancel()
从未在DashboardHelpController
上定义,即使这是您为测试创建的范围。您需要在仪表板控制器上创建一个方法,该方法在创建modalInstance后调用模态实例close方法
var modalInstance = $uibModal.open({
...
dhc.cancel = function () {
modalInstance.dismiss();
}
scope.cancel
是一个函数,但您并没有这样调用它
it('should have called the modal dismiss function', function () {
scope.cancel();
expect(modalInstance.dismiss).toHaveBeenCalledWith();
});
此外,scope.cancel()
从未在DashboardHelpController
上定义,即使这是您为测试创建的范围。您需要在仪表板控制器上创建一个方法,该方法在创建modalInstance后调用模态实例close方法
var modalInstance = $uibModal.open({
...
dhc.cancel = function () {
modalInstance.dismiss();
}
取消是一项功能<代码>范围。取消不调用它。即使有括号,cancel()也是ModalInstanceCtrl的函数,您永远不会在任何地方实例化它,也不会是$scope的函数。请看我的更新<代码>取消()是实例控制器的一个功能。我的问题在于我无法通过各种控制器和函数跟踪作用域。我不知道你为什么关心作用域,因为这两个控制器都没有使用它。为什么要在DashboardHelpController的测试中尝试测试cancel(),这是ModalInstanceCtrl的一个函数?所谓作用域,我指的是被模拟的对象。问得好。我可能已经让自己在测试模态的各种尝试中有点扭曲了。您将如何测试模态的功能?我没有接受/拒绝类型的函数,只有一个视频播放模式。这里没有太多测试。首先应避免使用未定义的全局变量,如
resource
。唯一可以测试的是dhc.open使用预期参数调用$uibModal.open(),而ModalInstanceCtrl.cancel()调用$uibModalInstance上的dismise()。但是这样的单元测试并没有多大价值<代码>范围。取消不调用它。即使有括号,cancel()也是ModalInstanceCtrl的函数,您永远不会在任何地方实例化它,也不会是$scope的函数。请看我的更新<代码>取消()是实例控制器的一个功能。我的问题在于我无法通过各种控制器和函数跟踪作用域。我不知道你为什么关心作用域,因为这两个控制器都没有使用它。为什么要在DashboardHelpController的测试中尝试测试cancel(),这是ModalInstanceCtrl的一个函数?所谓作用域,我指的是被模拟的对象。问得好。我可能已经让自己在测试模态的各种尝试中有点扭曲了。您将如何测试模态的功能?我没有接受/拒绝类型的函数,只有一个视频播放模式。这里没有太多测试。首先应避免使用未定义的全局变量,如resource
。唯一可以测试的是dhc.open使用预期参数调用$uibModal.open(),而ModalInstanceCtrl.cancel()调用$uibModalInstance上的dismise()。但这样的单元测试并没有多大价值。@CodeMed我已经为您的问题添加了答案。@CodeMed我已经为您的问题添加了答案。