sevenLee
12/8/2015 - 7:45 AM

Angular Unit Test - use $provide.vlaue() overwrite (if spyOn can't work, use these tips) http://crudbetter.com/angularjs-jasmine-testing-tip

Angular Unit Test - use $provide.vlaue() overwrite (if spyOn can't work, use these tips) http://crudbetter.com/angularjs-jasmine-testing-tips/

describe('Repository: ArticleRepository', function() {
  var Article, ArticleHttp, ArticleRepository; 
  var $rootScope;

  beforeEach(function() {
    module('repositories', function($provide) {
      $provide.value('Article', jasmine.createSpy('Article'));
      $provide.value('ArticleHttp', jasmine.createSpy('ArticleHttp'));
    });

    inject(function(_Article_, _ArticleHttp_, _ArticleRepository_, $q, _$rootScope_) {
      Article = _Article_;
      ArticleRepository = _ArticleRepository_;

      ArticleHttp = $q.defer();
      _ArticleHttp_.and.returnValue(ArticleHttp.promise);

      $rootScope = _$rootScope_;
    });
  });

  describe('Function: getAll', function() {
    it('should return a collection of Article objects', function() {
      var results = [];

      ArticleRepository.getAll().then(function(articles) {
        results = articles;
      });

      ArticleHttp.resolve([
        {
          title: 'title1',
          body: 'body1'
        }
      ]);
      $rootScope.$apply();

      expect(results.length).toBe(1);

      for (var i = 0; i < results.length; i++) {
        expect(results[i] instanceof Article).toBeTruthy();
      }
    });
  });
});