您可以在它自己的模块中创建一个适当的服务模拟并将其添加到任何需要它的测试中,而不是用间谍喷洒测试代码。
控制器单元测试位于 test/spec/modules/user/controller.js 文件中。
模拟服务位于 test/mock/modules/user/service.js 文件中。
对于控制器方法:
$scope.refreshList = function() {
UserService.all(pageNumber, size, sort, function(data) {
$scope.users = data.content;
$scope.page = data.page;
});
};
模拟服务:
(function () {
'use strict';
angular.module('app.user.mock', ['app.user']);
angular.module('app.user.mock').factory('UserServiceMock',
['$q',
function($q) {
var factory = {};
factory.mockedUsers = {
content: [ { firstname: 'Spirou', lastname: 'Fantasio', email: 'spirou@yahoo.se', workPhone: '983743464365' } ],
page: '1'
};
factory.search = function(searchTerm, page, size, sort, callback) {
var defer = $q.defer();
defer.resolve(this.mockedUsers);
defer.promise.then(callback);
return defer.promise;
};
factory.all = function(page, size, sort, callback) {
var defer = $q.defer();
defer.resolve(this.mockedUsers);
defer.promise.then(callback);
return defer.promise;
};
return factory;
}
]);
})();
和控制器单元测试:
(function () {
'use strict';
var $scope;
var listController;
var UserServiceMock;
beforeEach(function() {
module('app.project');
module('app.user.mock'); // (1)
});
beforeEach(inject(function($rootScope, _UserServiceMock_) {
$scope = $rootScope.$new();
UserServiceMock = _UserServiceMock_; // (2)
}));
describe('user.listCtrl', function() {
beforeEach(inject(function($controller) {
listController = $controller('user.listCtrl', {
$scope: $scope,
UserService: UserServiceMock
});
}));
it('should have a search function', function () { // (3)
expect(angular.isFunction(UserServiceMock.search)).toBe(true);
});
it('should have an all function', function () {
expect(angular.isFunction(UserServiceMock.all)).toBe(true);
});
it('should have mocked users in the service', function () {
expect(UserServiceMock.mockedUsers).toBeDefined();
});
it('should set the list of users in the scope', function (){
expect($scope.users).not.toEqual(UserServiceMock.mockedUsers);
$scope.refreshList();
$scope.$digest();
expect($scope.users).toEqual(UserServiceMock.mockedUsers.content);
});
});
})();
添加包含模拟服务的 app.user.mock 模块 (1) 并将模拟服务注入控制器 (2)。
然后,您可以测试您的模拟服务是否已被注入 (3)。