Angular 单元测试 - 控制器中的模拟方法

Angular unit-test - mocking method in controller

我需要模拟控制器中的服务方法。我知道如何模拟像 service.method 这样的简单服务,但不像这个。我不知道如何嘲笑 "action.user.update"。如果我试图监视它,我会收到错误消息“无法读取未定义的 属性 'update'”。

JsFidleDemo

我的服务:

.service('action', ['$http', '$q', function ($http, $q) {
    var service = {};

     service.user = {
        update: function (data, config) {
             return service.run({
                name: config.name,
                call: $http({
                    method: "POST",
                    url: "/user/edit",
                    data: data
                }),
                success: config.success,
                error: config.error
            });
        }
    };

    return service;
}]);

你已经完成了一半

$provide.value('action', action);

其中 action 应该是您在单元测试中创建的对象

action = {
    user: {
        update: jasmine.createSpy('action.user.update')
    }
}
$provide.value('action', action);

然后在测试

scope.saveUser()
expect(action.user.update).toHaveBeenCalled()

已更新fiddle http://jsfiddle.net/3oavnmev/1/