好的,所以我很长时间以来一直在偶然发现一些问题,我想听听社区其他人的意见。
首先,让我们看一些抽象控制器。
function Ctrl($scope, anyService) {
$scope.field = "field";
$scope.whenClicked = function() {
util();
};
function util() {
anyService.doSmth();
}
}
显然我们在这里:
$scope
注入了一些服务的控制器的常规脚手架- 附加到范围的一些字段和功能
- 私有方法
util()
现在,我想在单元测试(Jasmine)中介绍这个类。但是,问题是我想验证当我单击(调用whenClicked()
)某个项目时,该util()
方法将被调用。我不知道该怎么做,因为在 Jasmine 测试中,我总是遇到错误,即 mock forutil()
尚未定义或未调用。
注意:我不是要修复这个特定的例子,我是在问一般测试这样的代码模式。所以请不要告诉我“什么是确切的错误”。我问的是如何做到这一点,而不是如何解决这个问题。
我一直在尝试多种方法来解决这个问题:
- 显然我不能
$scope
在我的单元测试中使用,因为我没有将此函数附加到该对象(它通常以消息Expected spy but got undefined
或类似结尾) - 我尝试通过将这些函数附加到控制器对象
Ctrl.util = util;
,然后验证模拟,Ctrl.util = jasmine.createSpy()
但在这种情况下Ctrl.util
没有被调用,因此测试失败 - 我试图改变
util()
以附加到this
对象并再次嘲笑Ctrl.util
,但没有运气
好吧,我无法解决这个问题,我希望 JS ninjas 能提供一些帮助,一个工作小提琴将是完美的。