2016-11-30 1 views
0

Ich möchte $ resource Erfolg und Fehler Rückrufe in meinem Controller testen. Ich möchte $ httpBackend nicht verwenden, um den Datendienst zu testen. Es scheint jedoch, dass es keine Möglichkeit gibt, dies zu tun. Die einzige Lösung, die ich gefunden habe, ist, stattdessen Versprechen zu verwenden, die ich entweder auflösen oder ablehnen könnte. Klingt das richtig? Wie auch immer, hier ist das, was ich im Moment haben - zur Zeit nur prüft, ob die $ resource get() aufgerufen wird:

Der Controller:

angular 
    .module('myModule') 
    .controller('MyCtrl', MyCtrl); 

MyCtrl.$inject = [ 
    'dataService' 
]; 

function MyCtrl(
    dataService 
) { 
    var vm = this; 

    vm.getData = getData; 

    function getData() { 
    dataService.getData().get(function(response) { 
     // stuff to test 
    }, 

    function(error) { 
     // stuff to test 
    }); 
    } 

Der Test:

describe('Controller: MyCtrl', function() { 
    var MyCtrl; 
    var rootScope; 
    var scope; 
    var dataServiceMock = { 
    getData: jasmine.createSpy('getData') 
    }; 

    beforeEach(function() 
    inject(function($controller, $rootScope) { 
     rootScope = $rootScope; 
     scope = $rootScope.$new(); 
     MyCtrl = $controller('MyCtrl as vm', { 
     dataService: dataServiceMock, 
     }); 
    }); 
    }); 

    describe('vm.getData()', function() { 
    beforeEach(function() { 
     dataServiceMock.getData.and.returnValue({ 
     get: jasmine.createSpy('get') 
     }); 
    }); 

    it('gets the data', function() { 
     scope.vm.getData(); 
     expect(dataServiceMock.getData().get).toHaveBeenCalled(); 
    }); 
    }); 
}); 

Antwort

0

Try Dies ist

+0

Danke für die Antwort, aber wie ich in meiner Frage gesagt habe, bin ich mir bewusst, dass, wenn ich Versprechungen verwende ich das $ Ressourcenergebnis testen kann - ich w Idealerweise möchte ich einen Weg finden, um Erfolgs- und Fehlerrückrufe zu testen, um den bestehenden Code nicht zu überarbeiten. – Jay

Verwandte Themen