1

Привет, я сейчас настраиваю некоторые модульные тесты с кармой и жасмином. И у меня возникают трудности с попыткой полностью протестировать ng-ресурс. Когда я выполняю команду scope.clients.query(), выполняется запрос. Но когда я пытаюсь сделать это в модульном тесте, это не удастся.Единичное тестирование углового ng-ресурса

Есть ли у кого-то похожие проблемы, и есть ли у кого-нибудь идеи, как решить эту проблему?

например.

var mockResponse = [[{ 
     "name": "foo", 
    },{ 
     "name": "foo", 
    } 
    ]; 
describe("adserver module", function() { 

    //define module 
    beforeEach(module('someModule')); 

    describe("some controller", function() { 

    var scope, controller, $httpBackend; 

    var CTRL = 'someCtrl'; 

    beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) { 
     $httpBackend = _$httpBackend_; 
     scope = $rootScope.$new(); 
     controller = $controller; 
    })); 

    afterEach(function() { 
     $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 

    beforeEach(function() { 
     //define requests and responses 
     $httpBackend.expectGET('/api/clients').respond(mockResponse); 

     //aplly controller 
     controller(CTRL, { 
     $scope: scope 
     }); 

     // flush all request 
     $httpBackend.flush(); 
    }); 

    //SPECS 
     it('should contain clients', function() { 
     expect(typeof scope.clients).toBe('object'); 
     expect(scope.clients.length).toBe(2); 
    }); 

    it('scope should re-request', function() { 
     scope.clients.query(); /// will not work methode undefined 
     expect(scope.clients.length).toBe(2); 
    }); 
    }); 
}); 

ответ

0

Вы не используете $ httpBackend правильно.

Во-первых, определение фиктивного ответа:

$httpBackend.whenGET('/api/clients').respond(mockResponse); 

Затем, позже, ожидание:

$httpBackend.expectGET('/api/clients'); 
$httpBackend.flush(); 
Смежные вопросы