Я пытаюсь протестировать контроллер, а не требовать, чтобы я издевался над сервисом, который я использую для получения данных. В настоящее время я получаю сообщение об ошибке сказав функции не определено на этой линии:Единичное тестирование углового кода с помощью сервиса с использованием Jasmine
dataServiceMock = jasmine.createSpyObj('dataService', ['getFunctionStuff']);
Согласно другим примерам и руководств это должно работать нормально.
Вот мой код, включая тестовый файл, сервис и контроллер.
Контроллер:
var app = angular.module('myApp', []);
app.controller('MainCtrl', function($scope, dataService) {
dataService.getFunctionStuff($scope.foo)
.then(function(data) {
$scope.test = data;
});
});
Услуги:
app.factory('dataService', function ($timeout, $q){
function getFunctionStuff(formData) {
return $http.post('../randomAPICall', formData).then(function(data) {
return data;
});
};
});
Тесты:
describe('Testing a controller', function() {
var $scope, ctrl, $timeout;
var dataServiceMock;
beforeEach(function(){
dataServiceMock = jasmine.createSpyObj('dataService', ['getFunctionStuff']);
module('myApp');
inject(function($rootScope, $controller, $q, _$timeout_) {
$scope = $rootScope.$new();
dataServiceMock.getFunctionStuff.and.ReturnValue($q.when('test'));
$timeout = _$timeout_;
ctrl = $controller('MainCtrl', {
$scope: $scope,
dataService: dataServiceMock
});
});
});
it('should update test', function(){
expect($scope.test).toEqual('test');
});
});
Вот plunker его: http://plnkr.co/edit/tBSl88RRhj56h3Oiny6S?p=preview
Я опубликовал 2 способа выполнить единичный тест. Один из них - ваш способ создать шпиона, другой - использовать '$ httpBackend', который является обычным способом. – elaijuh