Новинка для всего теста. Я получил это работает ранее сегодня, но одна проблема у меня была была ошибка GET, когда я не включил следующую строку:Угловое модульное тестирование и httpBackend.expectGET
httpBackend.expectGET('view/contents/home.html').respond(200, '');
В чем дело с этим? Зачем мне это нужно? Контроллер, который я тестирую, не имеет ссылки на этот файл. Может кто-нибудь объяснить, почему он пытается захватить этот шаблон?
var controllers = angular.module('app.controllers', ['app.projects']);
controllers.controller('MainCtrl', function($scope, foo) {
$scope.currentStatus = null;
$scope.init = function(){
foo.fn().then(function(status){
$scope.currentStatus = status;
});
}
});
describe('Controllers:: Master.js', function() {
// load the controller's module
beforeEach(module('app'));
var scope;
var foo;
var stateParams;
var q;
var deferred;
var rootScope;
var httpBackend;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope, $q, _$httpBackend_) {
foo = {
fn: function() {
deferred = $q.defer();
deferred.resolve('bar');
return deferred.promise;
}
};
scope = $rootScope.$new();
stateParams = {};
q = $q;
rootScope = $rootScope;
httpBackend = _$httpBackend_;
httpBackend.expectGET('view/contents/home.html').respond(200, '');
$controller('MainCtrl', {
$scope: scope,
$stateParams:stateParams,
foo: foo,
});
}));
it('Should call foo fn', function() {
spyOn(foo, 'fn').and.callThrough();
scope.init();
//deferred.resolve('foo');
scope.$apply();
expect(foo.fn).toHaveBeenCalled();
expect(scope.currentStatus).toBe('bar');
});
});