当前位置: 首页 > 面试题库 >

在AngularJS中测试$ resource服务

席弘图
2023-03-14
问题内容

我正在尝试开始为我的角度应用程序编写单元测试,并且由于无法确定如何以一种可测试的方式模拟服务而非常快地遇到了一个障碍。
有没有一种方法可以模拟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](http://jsfiddle.net/8FRBS/)**



 类似资料:
  • 本文向大家介绍深入理解Angularjs中的$resource服务,包括了深入理解Angularjs中的$resource服务的使用技巧和注意事项,需要的朋友参考一下 一、$resource服务介绍 $http服务提供的实现极为简单和低级,可以用来发送XHR请求,同时它还为你提供了很大的可控性和灵活性。但是,在大多数情况下,我们需要处理对象,以及封装了特定属性和方法的对象模型,例如一个person

  • 本文向大家介绍AngularJS 单元测试服务,包括了AngularJS 单元测试服务的使用技巧和注意事项,需要的朋友参考一下 示例 服务编号 考试 跑!

  • 问题内容: 我正在尝试测试AngularJS服务,但似乎不起作用。 谁能解释为什么响应为空? 问题答案: 试试这个: 请求返回的响应对象在属性(docs)中具有响应数据。

  • 问题内容: 我正在向我的API发出请求,并且正在使用AngularJS $ resource模块。它与$ http不同,因此我不知道如何处理错误。 我的服务: 我的控制器: 我想要类似这样的东西..如果我的API无法正常工作,我不知道如何处理错误。 问题答案: 您可以将错误处理程序作为第二个参数传递给。 编辑: 为了使事情更清楚一些,例如:

  • 以下测验提供与AngularJS Framework相关的多项选择题(MCQ)。 您必须阅读所有给定的答案并单击正确的答案。 如果您不确定答案,则可以使用“ Show Answer按钮Show Answer 。 您可以使用“ Next Quiz按钮在Next Quiz中检查新的问题集。 问题2 - 关于ng-controller指令,以下哪项是正确的? A -ng-controller指令告诉An

  • 问题内容: 我有一些要调用的Web服务。或,我应该使用哪一个? :https : //docs.angularjs.org/api/ngResource/service/$resource :https : //docs.angularjs.org/api/ng/service/$http 阅读以上两个API页面后,我迷路了。 您能用简单的英语给我解释一下有什么区别,在什么情况下我应该使用它们?如