有没有人有一个使用$ httpBackend的例子(模块ngMockE2E中的服务)

时间:2013-02-19 04:36:52

标签: mocking angularjs

我真的希望找到最简单的方法来让我的角应用程序使用模拟后端服务。

任何指针都会很棒,一个示例应用程序,展示了如何使用它来编写一个简单的应用程序。 TNX!

2 个答案:

答案 0 :(得分:11)

以下为sample plunkr使用$ httpBackend作为回复this question的示例,以回复$httpBackend作为示例。

我添加到plnkr以使其工作的主要内容是:

  1. 引用了html中的angular-mocks.js文件。
  2. 在app.js第3行的angular.module需要数组中添加ngMockE2E
  3. 向app.run注入$httpBackend并添加代码以告知模拟后端在请求对特定网址进行GET时要回复的内容。
  4. 这主要来自{{3}}文档。请注意,您可以为要实际点击后端的任何调用执行.passThrough()(绕过模拟)。如果后端的某些部分已经在工作,这将特别有用。

答案 1 :(得分:2)

以下是从各种示例中提取的基本模板:

'use strict';

(function() {

    if( !document.URL.match(/\?nobackend$/) ){
        // if not requested only add a blank stub to app dependency.
        angular.module('ds.backendMock', []);

    } else if (document.URL.match(/\?nobackend$/)) {

        // if the query string is present add a module with a run definition to replace the back end.
        angular.module('myMock', ['ngMockE2E'])

            .run(function($httpBackend) {

                // MOCK-RUNNER-CONFIGURATION-.
                var DOMAIN = 'example.com',
        $httpBackend.whenGET('http://'+DOMAIN+'/someexample')
                    .respond(
                        //MOCK-ERROR-STATUS-CODE
                        //401 //500 //404  //uncomment integer to mock status code and comment out mock data.
                        //MOCK-DATA-RESPONSE
                        {
                          'id' : '1',
                          'name' : 'MOCK',
                          'description' : 'mocking',

                        }
                    ); //end mock.


                    // various passthroughs. these allow existing services to work, while some are mocked.
                    $httpBackend.whenGET('./some.html').passThrough();

                    // dont mock everything else, specify pass through to avoid error.
                    $httpBackend.whenGET(/^\w+.*/).passThrough();
                    $httpBackend.whenPOST(/^\w+.*/).passThrough();

                });

        }

})(angular);