2017-01-02 42 views
2

我的服务(厂)是这样的:测试AngularJS服务(厂)有因果报应和茉莉花

angular.module('App') 
    .factory('SalesService', function($http) { 
    return { 
     getSales: function(data) { 
     return $http.get('/sales'); 
     } 
    } 
}) 

意外的请求:GET /销售当我这样做:

describe('Sales Services', function() { 

    beforeEach(module('App')); 

    it('should get the sales data', inject(function(SalesServices, $httpBackend) { 
    SalesServices.getSales().then(function(data) { 
     expect(data.success).toBeTruthy(); 
    }); 
    $httpBackend.flush(); 
    })); 

}); 

一切对我来说似乎没问题。我做错了什么?

+0

这里输入错误:.getSaless() – ppasler

+0

@ppasler修复了输入错误,我确定这不是问题 –

+0

另一个:'SalesServices'和工厂创建'SalesService'而没有's' – ppasler

回答

0

为了不inject在所有测试你的依赖,你应该使用beforeEach

var $httpBackend, SalesService; 

beforeEach(module('App')); 

beforeEach(inject(function (_$httpBackend_, _SalesService_) { 
    $httpBackend = _$httpBackend_; 
    SalesService = _SalesService_; 
})); 

然后,在您的测试,你应该预期调用一些网址:

it('should get the sales data', function() { 
    // given 
    var response = { data: 'result' }; 
    var result = {} 
    $httpBackend.expect('GET', '/sales').respond(200, response); 

    // when 
    SalesService.getSales().then(function (responseData) { 
    result = responseData; 
    }); 
    $httpBackend.flush(); 

    // then 
    expect(result).toEqual(response); 
}); 

最后,您需要确保没有待处理的请求:

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

响应方法在做什么$ httpBackend.expect('GET','/sales').respond(200,response); '?我的get不接受任何请求param,为什么我需要在这里传递响应对象? –

+0

和第5行的'suite'是从哪里来的? –

+0

@ThianKianPhin你现在可以忽略套件对象,我将它删除。这是我们稍后可以讨论的额外优化。 – tomepejo