在AngularJS测试$资源服务 [英] Testing $resource services in AngularJS

查看:203
本文介绍了在AngularJS测试$资源服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想开始编写单元测试我的角度应用,并触及栓块pretty快,我不确定究竟如何嘲笑我的服务可测试的方式。结果
有没有一种办法,否则嘲笑REST调用它似乎像我需要的镜子,我在我的测试服务中的一切这看起来不正确给我,但我是相当新的测试写入,所以也许这是它应该是怎样要完成。任何帮助将大大AP preciated。

我的服务如下:

  angular.module('resources.users',['ngResource'])。
    工厂(用户,函数($资源){
VAR资源= $资源('/ API / index.php文件/用户/:用户名',{},{
    更新:{方法:把'}
});resource.getUser =功能(用户名,successCb){
    返回resource.query(
         {用户名:用​​户名},
          successCb
    );
};返回的资源;
});

我的测试包括迄今为止的:

 描述(用户,函数(){
VAR mockUserResource;
beforeEach(模块('resources.users'));
beforeEach(函数(){
    mockUserResource = sinon.stub({
        的getUser:功能(用户名){
            mockUserResource.query({用户名:用​​户名});
        },
        查询:功能(){
        }});
    模块(函数($提供){
        $ provide.value(用户,mockUserResource);
    })
});
描述(的getUser',函数(){
    它('应该调用的getUser与用户名,注入(功能(用户){
        User.getUser('测试');
        期待(mockUserResource.query.args [0] [0])toEqual({用户名:'测试'});
    }));})
});


解决方案

您可以通过模拟像ngResource此提出的要求:

 描述(用户,函数(){
    VAR mockUserResource,$ httpBackend;
    beforeEach(angular.mock.module('对myApp'));    beforeEach(函数(){
        angular.mock.inject(函数($喷油器){
            $ httpBackend = $ injector.get('$ httpBackend');
            mockUserResource = $ injector.get(用户);
        })
    });    描述(的getUser',函数(){
        它('应该调用的getUser与用户名,注入(功能(用户){
            $ httpBackend.expectGET('/ API / index.php文件/用户/测试)
                。响应([{
                用户名:测试
            }]);            VAR的结果= mockUserResource.getUser('测试');            $ httpBackend.flush();            期待(结果[0] .username).toEqual('测试');
        }));    });
});

<大骨节病> 演示

I am trying to begin writing unit tests for my angular application and hit a stopping block pretty quick as I am unsure of how exactly to mock my service in a testable way.
Is there a way to mock the REST call otherwise it would seem like I need to mirror everything within my service in my tests which doesn't seem right to me, but I am rather new to test writing so maybe this is how it is supposed to be accomplished. Any help would be greatly appreciated.

My service is as follows:

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

My test consists thus far of:

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

})
});

解决方案

You can mock the requests made by ngResource like this:

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测试$资源服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆