$ httpBackend.whenGET()passThrough()未定义

Ada*_*nau 11 angularjs angularjs-e2e

我想传递一些我的http请求,而不是在我的单元测试中模拟它们,但是当我尝试调用passThrough()方法时,抛出了丢失方法的错误:

"TypeError:Object#没有方法'passThrough'".

有人知道我该如何解决它吗?

有我的代码:

'use strict';

describe('Controller: MainCtrl', function () {

    // load the controller's module
    beforeEach(module('w00App'));

    var scope, MainCtrl, $httpBackend;

    // Initialize the controller and a mock scope
    beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
        $httpBackend = _$httpBackend_;
        $httpBackend.expectGET('http://api.some.com/testdata.json').passThrough();


        scope = $rootScope.$new();
        MainCtrl = $controller('MainCtrl', {
            $scope: scope
        });
    }));
});
Run Code Online (Sandbox Code Playgroud)

BKM*_*BKM 3

如果您想在开发过程中模拟后端,只需安装angular-mocks在主 html 文件中,将其添加为应用程序中的依赖项(angular.module('myApp', ['ngMockE2E'])),然后模拟您需要的请求。

例如;

angular.module('myApp')
  .controller('MainCtrl', function ($scope, $httpBackend, $http) {
    $httpBackend.whenGET('test').respond(200, {message: "Hello world"});
    $http.get('test').then(function(response){
      $scope.message = response.message //Hello world
    })
  });
Run Code Online (Sandbox Code Playgroud)

但请注意,添加 ngMockE2E 将要求您设置路由(如果您通过 AngularJS 路由这样做)。

例子;

angular.module('myApp', ['ngMockE2E'])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  })
  .run(function($httpBackend){
    $httpBackend.whenGET('views/main.html').passThrough();
  })
Run Code Online (Sandbox Code Playgroud)

  • 您不应将 Angular-Mocks 添加为应用程序的依赖项,而应在 karma.conf 中使用它。然后在 beforeEach(module(...)) 中传入 'ngMockE2E'。 (11认同)
  • +1 奇闻怪鱼。只需添加 beforeEach(function(){module('ngMockE2E');}); 在你的测试中。无需用测试内容污染您的应用程序。 (4认同)