在angularjs测试中验证$ httpBackend上的调用

时间:2015-06-14 12:31:19

标签: angularjs unit-testing jasmine

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

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调用必需参数。

1 个答案:

答案 0 :(得分:5)

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

无效。首先是因为$ httpBackend没有任何(记录的)get()方法。其次,因为Jasb没有监视$ httpBackend.get,所以如果调用了这个方法,你就不能添加Jasmine。

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

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

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

以便$ httpBackend验证您是否已发送预期请求。