2014-10-10 4 views
2

Это мой первый вопрос здесь. Я постараюсь сделать все возможное. Я искал много до публикацииКак проверить угловую фабрику, которая использует Parse SDK

Я разрабатываю приложение angularJS, опираясь на Javascript ParseSDK. Я убедил себя погрузиться в тестирование в последнее время, поэтому я новичок.

У меня есть эта фабрика UserFactory, которая обертывает вокруг SDK, поэтому все чистое и модульное Угловое. т.е.: SDK используется только на заводах (а не на контроллерах или директивах).

Это выглядит следующим образом:

myModule.factory('UserFactory', ['$q', function($q){ 
    var User = Parse.User.extend({ 
     // Instance methods 
    },{ 
     // static/class methods 
     // Overrides Parse.User.current() to wrap current User in promise 
     current: function(){ 
      var deferred = $q.defer(); 
      var currentUser = Parse.User.current(); 
      if(currentUser) 
       deferred.resolve(currentUser); 
      else 
       deferred.reject("No current user"); 
      return deferred.promise; 
     } 
    }); 

    return User; 
}]); 

Мой вопрос: Как проверить UserFactory.current() зная, что использует внешний сервис? Я искал насмешку над Parse SDK, но не знаю, как это сделать, поскольку он не является угловым (т. Е. Не может использовать httpBackend).

Мой текущий файл теста:

describe("Unit: UserFactory", function(){ 
    var UserFactory; 

    beforeEach(function(){ 
     module("myModule"); 
     inject(function(_UserFactory_){ 
      UserFactory = _UserFactory_; 
     }); 
    }); 

    it("should return current User", function(){ 
     // What to expect ? 
    }); 
}); 

Спасибо заранее

+0

Что я обычно делаю, в этом случае, насмехается над 'Parse.User.current()', что делает его вернуть значение моего выбора и сравнить это значение после вызова, чтобы убедиться, что он вызвал этот метод (наряду с некоторыми шпионами). – GeoffreyB

ответ

1
describe("Unit: UserFactory", function(){ 
    var UserFactory; 

    beforeEach(function(){ 
     module("myModule"); 
     inject(function(_UserFactory_){ 
      UserFactory = _UserFactory_; 
      $rootScope = _$rootScope_; 
     }); 
    }); 

    describe('current()', function() { 

     var successCallback, errorCallback; 


     beforeEach(function() { 
     successCallback = jasmine.createSpy('success'); 
     errorCallback = jasmine.createSpy('error'); 
     }); 

     it("promise should resolve if Parse.User.current is truthy", function(){ 

     spyOn(Parse.User, 'current').and.returnValue(true); 

     UserFactory.current().then(successCallback, errorCallback); 

     $rootScope.$digest(); 

     expect(successCallback.calls.count()).toBe(1); 
     expect(errorCallback.calls.count()).toBe(0); 

     expect(Parse.User.current).toHaveCalledOnce(); 

     }); 

     it("promise should reject if Parse.User.current is falsy", function(){ 

     spyOn(Parse.User, 'current').and.returnValue(false); 

     UserFactory.current().then(successCallback, errorCallback); 

     $rootScope.$digest(); 

     expect(errorCallback.calls.count()).toBe(1); 
     expect(successCallback.calls.count()).toBe(0); 

     expect(Parse.User.current).toHaveCalledOnce(); 

     }); 


    }); 

}); 
+0

Спасибо, что положил меня на правильный путь. У меня все еще есть проблема. 'spyOn (Parse.User,« current »)' throws ** Невозможно прочитать свойство «returnValue» неопределенного ** –

+0

OK У меня была неправильная версия жасмина/кармы-жасмина. Он работает на 2_0 branche –

Смежные вопросы