Javascript 为什么我的jasmine测试在AngularJS控制器上失败?

Javascript 为什么我的jasmine测试在AngularJS控制器上失败?,javascript,angularjs,jasmine,Javascript,Angularjs,Jasmine,我得到了这个错误: 控制器:MainCtrl应检索用户列表并分配给作用域。用户失败 TypeError:“undefined”不是函数(正在计算“Users.findAll()”) 在/Users/John/NetBeansProjects/ClearsoftDemo/app/scripts/controllers.js:21 在调用时(/Users/John/NetBeansProjects/ClearsoftDemo/bower_components/angular/angular.js:3

我得到了这个错误:

控制器:MainCtrl应检索用户列表并分配给作用域。用户失败 TypeError:“undefined”不是函数(正在计算“Users.findAll()”) 在/Users/John/NetBeansProjects/ClearsoftDemo/app/scripts/controllers.js:21 在调用时(/Users/John/NetBeansProjects/ClearsoftDemo/bower_components/angular/angular.js:3869)”

以下是控制器代码:

.controller('MainCtrl', function ($scope, Users) {
        $scope.users = Users.findAll();
        $scope.sortField = 'lastName';
        $scope.reverseSort = true;
    })
以下是服务代码:

service.factory('Users', function ($resource) {
return $resource('http://localhost:8080/ClearsoftDemoBackend/webresources/clearsoft.demo.users', {}, {
    findAll: {method: 'GET', isArray: true}
});
}))

下面是测试代码:

beforeEach(inject(function ($controller, $rootScope) {
    var users = {query: function () {
            return [{}];
        }};
    scope = $rootScope.$new();
    MainCtrl = $controller('MainCtrl', {
        $scope: scope,
        Users: users
    });
}));

这是问题的一部分:您的mock没有声明
findAll
方法。请注意,您的
Users
资源将
findAll
声明为一种额外的方法—您的很多人也应该这样做。

测试中的
Users
并没有定义
findAll
,只是一个
查询
,谢谢Luis。如果您使用“回答”按钮正式回答我的问题,我可以将其标记为正确,这样您就可以获得学分。另外,请注意,您已经声明了
用户
服务,因此您不需要在测试中对其进行模拟。您可以使用
beforeach()
beforeach(module('name.of.module.with.service'))使测试套件意识到服务(将测试中依赖的任何模块的名称作为此函数的字符串参数)感谢Sunil。有人告诉我,为了对控制器进行单元测试,最好模拟服务,并且应该在不同的单元测试中测试服务。这个想法是一个将有很少的依赖性问题和更好的分离关注点。Luis:有人告诉我,在控制器的单元测试中最好模拟服务,并且应该在不同的单元测试中测试服务。这个想法是一个将有很少的依赖性问题和更好的分离关注点。你觉得怎么样?对不起。你说得对。我想到了集成测试xD。