我使用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
。