2015-05-20 6 views
0

Новинка для всего теста. Я получил это работает ранее сегодня, но одна проблема у меня была была ошибка 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'); 

}); 

}); 

ответ

0

Больше копания. По-видимому, ошибка срабатывает с помощью ui-router и вызова $ apply (который вызывает $ digest()) в моем тесте. Добавление этого в мой блок «Описать» сработало для меня.

beforeEach(module(function($urlRouterProvider) { 
    $urlRouterProvider.deferIntercept(); 
})); 

Больше информации здесь: https://github.com/angular-ui/ui-router/issues/212

Смежные вопросы