Testing angular $resource with Jasmine
Testing angular $resource with Jasmine
by Krzysztof Safjanowski
HTML
<script src="http://jasmine.github.io/1.3/lib/jasmine.js"></script>
<script src="http://jasmine.github.io/1.3/lib/jasmine-html.js"></script>
<link rel="stylesheet" href="http://jasmine.github.io/1.3/lib/jasmine.css">
<script src="http://code.angularjs.org/1.2.9/angular.js"></script>
<script src="http://code.angularjs.org/1.2.9/angular-mocks.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular-resource.js"></script>
JavaScript
//--- CODE --------------------------
(function (angular) {
angular.module('userApp', ['ngResource'])
.factory('User', function($resource) {
return $resource('/user/:userId/card/:cardId', {userId: '@userId', cardId: '@id'})
});
})(angular);
// ---SPECS-------------------------
describe('userApp', function () {
var user
, $httpBackend
;
beforeEach(function () {
module('userApp');
});
beforeEach(inject(function (User, _$httpBackend_) {
user = User;
$httpBackend = _$httpBackend_;
}));
describe('User /user/1/card/12', function () {
it('Fetches coresponding user object by method GET /user/1/card/12 and save changes to /user/1/card/12', function () {
$httpBackend.expectGET('/user/1/card/12').respond({id: 12, userId: 1, holder: "Alior"});
$httpBackend.expectPOST('/user/1/card/12', {id: 12, userId: 1, name: "Krzysztof Safjanowski", holder: "Alior"}).respond(200);
/*user.get({userId: 1, cardId: 12}, function(u) {
u.name = "Krzysztof Safjanowski";
u.$save();
});*/
user.get({userId: 1, cardId: 12}).$promise.then(function(u) {
u.name = "Krzysztof Safjanowski";
u.$save();
})
$httpBackend.flush();
});
it('Handles error occurring', function () {
$httpBackend.expectGET('/user/1/card').respond(403, {message: "Somethings goes really wrong"});
user.get({userId: 1}).$promise.then(function(u) {
}).catch(function(e) {
console.log(e)
});
$httpBackend.flush();
});
});
});
// --- Runner -------------------------
(function () {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
...