在AngularJS中测试$resource服务

前端之家收集整理的这篇文章主要介绍了在AngularJS中测试$resource服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图开始写我的角度应用程序的单元测试,并打了一个停止块相当快,因为​​我不知道如何确切地模拟我的服务在一个可测试的方式。
是否有一种方式来模拟REST调用,否则它似乎需要镜像我的服务内的一切,在我的测试,这似乎不对我,但我是新的测试写作,所以也许这是怎么回事完成。任何帮助将不胜感激。

我的服务如下:

angular.module('resources.users',['ngResource'])
.factory('User',function($resource) {
   var resource = $resource('/api/index.PHP/users/:username',{},{
      'update': {method: 'PUT'}
   });

   resource.getUser = function(username,successCb) {
      return resource.query({username: username},successCb);
   };

   return resource;
});

我的测试包括

describe('User',function() {
    var mockUserResource;
    beforeEach(module('resources.users'));
    beforeEach(function() {
        mockUserResource = sinon.stub({
            getUser: function(username) {
                mockUserResource.query({username: username});
            },query: function() {}
        });
        module(function($provide) {
            $provide.value('User',mockUserResource);
        })
   });
   describe('getUser',function() {
      it('should call getUser with username',inject(function(User) {
          User.getUser('test');
          expect(mockUserResource.query.args[0][0]).toEqual({username: 'test'});
      }));
   })
});
你可以模拟ngResource的请求,像这样:
describe('User',function () {
    var mockUserResource,$httpBackend;
    beforeEach(angular.mock.module('myApp'));

    beforeEach(function () {
        angular.mock.inject(function ($injector) {
            $httpBackend = $injector.get('$httpBackend');
            mockUserResource = $injector.get('User');
        })
    });

    describe('getUser',function () {
        it('should call getUser with username',inject(function (User) {
            $httpBackend.expectGET('/api/index.PHP/users/test')
                .respond([{
                username: 'test'
            }]);

            var result = mockUserResource.getUser('test');

            $httpBackend.flush();

            expect(result[0].username).toEqual('test');
        }));

    });
});

Demo

猜你在找的Angularjs相关文章