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