单元测试AngularJS工厂有制作http请求的方法

时间:2015-12-08 13:30:37

标签: angularjs unit-testing gulp karma-jasmine

我使用karma和jasmine对框架进行单元测试。

 var userApiFactory = (function ($http, $log, $q, appConfig) {
 apiFactory.logoutUser = function () {
    return $http.get(urlBase + "Auth/Logout");
};
}

我100%确定实际通过上述$http请求获得的API工作正常并返回包含一些JSON数据的承诺。

我没有嘲笑工厂,因为它们都包含发出HTTP请求的方法,并且通过测试这个工厂,我只需要测试所有方法都是用正确的参数调用的,然后这些方法正在使用正确的参数进行正确的http请求。 / p>

因此,我宁愿采用原始工厂的实例并引用它。我还创建了假httpBackEnd,这样就不会发现实际的API,而是返回了一个带有所需数据的假承诺。我的单元测试看起来像这样:

describe('unitTesting', function () {

var jsonData = {
    "logoutSucess": true
}

beforeEach(angular.mock.module('sampleApp'));

//Mocking authService
beforeEach(angular.mock.module(function($provide){

    $provide.constant('APP_CONFIG', {
        apiBaseUrl: "https://some.url.com"
    })
}));

var mock_appconfig, httpBackend, mockUserApiFactory;

beforeEach(angular.mock.inject(function(APP_CONFIG, $httpBackend, userApiFactory, $q){
    mock_appconfig = APP_CONFIG;
    httpBackend = $httpBackend;
    mockUserApiFactory = userApiFactory;
    var defer = $q.defer();
    defer.resolve(jsonData);
    httpBackend.when("GET",mock_appconfig.apiBaseUrl+"Auth/Logout").respond(defer.promise);
}));

it('mockUserApiFactory has log out method working', function(){
   spyOn(mockUserApiFactory, "logoutUser");
    var rcvd_data;
    var res = mockUserApiFactory.logoutUser();
    res.then(function(data){
           rcvd_data = data;
        })
    expect(mockUserApiFactory.logoutUser).toHaveBeenCalled();
    expect(rcvd_data).toEqual(jsonData);
})
});

我收到错误:Cannot read property then of undefined

0 个答案:

没有答案