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();
}
});
});
});