如何模拟angularjs应用程序的后端?

赤asha

我想测试运行$ resource的工厂方法。我的测试将模拟尚不存在的真实后端。

这是一个示例工厂代码:

app.factory( 'Global', function( $resource ){
  var Jogas = $resource('/jogasok/:id', {'id': '@id'}, {
    'ujBerlet': {'method': 'POST', 'params': {'berlet': true}}
  });
  var jogasok = Jogas.query();
  return {
    getJogasok: function() {
      return jogasok;
    }
  };
})

我的测试将是检查是否进行了查询。

如果我使用以下方法初始化我的应用程序:

app.run( function run ($httpBackend) {
  $httpBackend.whenGET('/jogasok').respond([
        {id: 1, name: 'asdfasdf'}, 
        {id: 2, name: '2wrerwert'}
      ]);
})

并在浏览器中打开应用程序,那么一切似乎都很好,我在浏览器中有虚拟数据。

但是,当我取出上面的运行代码并编写测试时,一切都不起作用。

describe( 'Global Service: ', function() {

  beforeEach( module('bkJoga') );
  beforeEach( inject(function($httpBackend) {
    $httpBackend.whenGET('/jogasok').respond([
      {id: 1, name: 'asdfasdf'}, 
      {id: 2, name: '2wrerwert'}
    ]);
  }));

  it('getJogasok should return everyone', inject(function(Global) {
    expect(JSON.stringify(Global.getJogasok())).toBe(JSON.stringify([
      {id: 1, name: 'asdfasdf'}, 
      {id: 2, name: '2wrerwert'}
    ]));
  }));
});

失败。

地球

这是您发布工厂时的工作测试。我为注入的httpBackend添加了变量$ httpBackend。并调用$ httpBackend.flush()。fiddle-demo(请阅读最后以获取小提琴内容的完整说明)

describe( 'Global Service: ', function() {
    var Global, $httpBackend

    // load the relevant application module, with the service to be tested
    beforeEach( module('bkJoga') );

    beforeEach( function() {

        // inject the mock for the http backend
        inject(function(_$httpBackend_) {
            $httpBackend = _$httpBackend_;
        });
        // mock the response to a particular get request
        $httpBackend.whenGET('/jogasok').respond([
            {id: 1, name: 'asdfasdf'}, 
            {id: 2, name: '2wrerwert'}
        ]);
        // inject the service to be tested
        inject(function(_Global_) {
            Global = _Global_;
        });
    });

    it('should exist', function() {
        expect(!!Global).toBe(true);
    });

    it('getJogasok should return everyone', function() {
        $httpBackend.flush();    // <------------ need to flush $httpBackend
        expect(JSON.stringify(Global.getJogasok())).toBe(JSON.stringify([
            {id: 1, name: 'asdfasdf'}, 
            {id: 2, name: '2wrerwert'}
        ]));
    });
});

无论如何,我都会以不同的方式重写工厂,因为正如当前编写的那样,它仅在实例化时查询数据库var jogasok = Jogas.query();由于angularjs中的服务是singletons,因此在您的应用中,您仅拥有实例化时的数据。因此,以后对数据的修改将不会反映在您的工厂中。这是反映此想法的工厂及其单元测试的示例。

该工厂:

app.factory('GlobalBest', function ($resource) {
    return $resource('/jogasok/:id', {
        'id': '@id'
    }, {
        'ujBerlet': {
            'method': 'POST',
                'params': {
                'berlet': true
            }
       }
    });
});

考试:

describe('GlobalBest Service: ', function () {
    var srv, $httpBackend;

    beforeEach(module('bkJoga'));

    beforeEach(function () {
        // inject the mock for the http backend
        inject(function (_$httpBackend_) {
            $httpBackend = _$httpBackend_;
        });

        // inject the service to be tested
        inject(function (_GlobalBest_) {
            srv = _GlobalBest_;
        });
    });

    it('should exist', function () {
        expect( !! srv).toBe(true);
    });

    it('query() should return everyone', function () {

        // mock the response to a particular get request
        $httpBackend.whenGET('/jogasok').respond([{
            id: 1,
            name: 'asdfasdf'
        }, {
            id: 2,
            name: '2wrerwert'
        }]);

        // send request to get everyone
        var data = srv.query();

        // flush the pending request
        $httpBackend.flush();
        expect(JSON.stringify(data)).toBe(JSON.stringify([{
            id: 1,
            name: 'asdfasdf'
        }, {
            id: 2,
            name: '2wrerwert'
        }]));
    });

    it('get({id: 1}) should return object with id=1', function () {
        // mock the response to a particular get request
        $httpBackend.whenGET('/jogasok/1').respond({
            id: 1,
            name: 'asdfasdf'
        });
        var datum = srv.get({
            id: 1
        });
        $httpBackend.flush();
        expect(JSON.stringify(datum)).toBe(JSON.stringify({
            id: 1,
            name: 'asdfasdf'
        }));
    });
});

我编写了一个fiddle-demo包含3个版本的服务:原始服务“ Global”,返回query()方法的新版本“ GlobalNew”,最后是直接返回$ resource的版本“ GlobalBest”。希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何保护应用程序-后端通信?

来自分类Dev

如何使用客户端的angularjs和后端的flask开发Web应用程序?

来自分类Dev

如何模拟iOS应用程序的更新

来自分类Dev

如何在AngularJS应用程序中模拟/存根Activate()方法

来自分类Dev

如何在AngularJS应用程序中模拟/存根Activate()方法

来自分类Dev

Android应用程序后端

来自分类Dev

如何在单个服务器上服务多个前端(AngularJS)应用程序和1个后端(Laravel)应用程序?

来自分类Dev

如何使用Django restframework作为移动应用程序的后端

来自分类Dev

如何使移动应用程序的服务器后端?

来自分类Dev

后端应用程序如何验证JavaScript框架应用程序发送的JWT令牌?

来自分类Dev

如何从EasyNetQ通知AngularJS应用程序

来自分类Dev

如何构造大型AngularJS应用程序

来自分类Dev

CakePHP应用程序作为移动应用程序的后端

来自分类Dev

如何模拟在iPad上运行的iPhone应用程序?

来自分类Dev

如何在 Windows 10 中模拟 iOS 应用程序

来自分类Dev

android应用程序的后端建议

来自分类Dev

移动应用程序的前端-后端通信

来自分类Dev

Android聊天应用程序后端

来自分类Dev

Web应用程序后端的C ++

来自分类Dev

在Java Web应用程序中使用AngularJS分发后端数据

来自分类Dev

在 Spring Boot 后端/Angularjs 前端应用程序中允许多个跨源?

来自分类Dev

如何将应用程序资源添加到应用程序的C#后端而不是XAML文件中?

来自分类Dev

Git:关于目录结构,如何分离后端Rest Api和前端应用程序的版本?

来自分类Dev

如何设置一个CMS作为Android应用程序的后端?

来自分类Dev

如何使用App Engine后端教程构建移动应用程序:不是App Engine项目

来自分类Dev

如何防止客户修改Firebase数据(在没有后端的Web应用程序中)?

来自分类Dev

如何将会话ID添加到Swift PHP MySQL应用程序后端

来自分类Dev

如何在本地应用程序中连接前端(js)和后端(php)?

来自分类Dev

如何在MEAN堆栈应用程序中从后端进行通信?

Related 相关文章

  1. 1

    如何保护应用程序-后端通信?

  2. 2

    如何使用客户端的angularjs和后端的flask开发Web应用程序?

  3. 3

    如何模拟iOS应用程序的更新

  4. 4

    如何在AngularJS应用程序中模拟/存根Activate()方法

  5. 5

    如何在AngularJS应用程序中模拟/存根Activate()方法

  6. 6

    Android应用程序后端

  7. 7

    如何在单个服务器上服务多个前端(AngularJS)应用程序和1个后端(Laravel)应用程序?

  8. 8

    如何使用Django restframework作为移动应用程序的后端

  9. 9

    如何使移动应用程序的服务器后端?

  10. 10

    后端应用程序如何验证JavaScript框架应用程序发送的JWT令牌?

  11. 11

    如何从EasyNetQ通知AngularJS应用程序

  12. 12

    如何构造大型AngularJS应用程序

  13. 13

    CakePHP应用程序作为移动应用程序的后端

  14. 14

    如何模拟在iPad上运行的iPhone应用程序?

  15. 15

    如何在 Windows 10 中模拟 iOS 应用程序

  16. 16

    android应用程序的后端建议

  17. 17

    移动应用程序的前端-后端通信

  18. 18

    Android聊天应用程序后端

  19. 19

    Web应用程序后端的C ++

  20. 20

    在Java Web应用程序中使用AngularJS分发后端数据

  21. 21

    在 Spring Boot 后端/Angularjs 前端应用程序中允许多个跨源?

  22. 22

    如何将应用程序资源添加到应用程序的C#后端而不是XAML文件中?

  23. 23

    Git:关于目录结构,如何分离后端Rest Api和前端应用程序的版本?

  24. 24

    如何设置一个CMS作为Android应用程序的后端?

  25. 25

    如何使用App Engine后端教程构建移动应用程序:不是App Engine项目

  26. 26

    如何防止客户修改Firebase数据(在没有后端的Web应用程序中)?

  27. 27

    如何将会话ID添加到Swift PHP MySQL应用程序后端

  28. 28

    如何在本地应用程序中连接前端(js)和后端(php)?

  29. 29

    如何在MEAN堆栈应用程序中从后端进行通信?

热门标签

归档