2015-06-14 50 views
2

我正在尝试编写一个测试模拟$ httpBackend的angularjs。以下是测试。

describe('test', function() { 

    beforeEach(function(){ 
     module('abcApp'); 
    }); 

    var $httpBackend, filterService; 
    beforeEach(inject(function($injector) { 
     $httpBackend = $injector.get('$httpBackend'); 
     filterService = $injector.get('filterService'); 
    })); 

    it('getCompany calls get on http with correct parameter', function() { 
     $httpBackend.when('GET', 'api/Abc').respond([]); 
     filterService.getAbc(); 
     $httpBackend.flush(); 
     expect($httpBackend.get).toHaveBeenCalled(); 
    }); 
}); 
当我运行测试,我得到以下错误

: - 错误:预期间谍,却得到了不确定。

任何想法我将如何断言$ httpBackend.get已使用expect期望的参数调用。

回答

4
expect($httpBackend.get).toHaveBeenCalled(); 

无效。首先,因为$ httpBackend没有任何(记录)的get()方法。其次,由于$ httpBackend.get不会被Jasmine窥探,因此如果调用此方法,则不能添加Jasmine。

你应该测试一下,给定http后端返回的空数组,服务返回正确的东西,或者具有所需的副作用。你也可以使用

$httpBackend.expectGET('api/Abc').respond([]); 

$httpBackend.verifyNoOutstandingExpectation(); 
$httpBackend.verifyNoOutstandingRequest(); 

使得$ httpBackend验证了您的预期请求已发送。