Подтвердить что ты не робот

$ httpBackend.whenGET() passThrough() не определено

Я хотел бы передать часть моего HTTP-запроса, а не издеваться над ними в моем unit test, но когда я пытаюсь вызвать метод passThrough(), выдается ошибка отсутствующего метода:

"TypeError: Object # не имеет метода passThrough."

Кто-нибудь знает, как я могу это исправить?

Есть мой код:

'use strict';

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

    // load the controller 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
        });
    }));
});
4b9b3361

Ответ 1

Если вы хотите издеваться над своим бэкэнд во время разработки, просто установите 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
    })
  });

Будьте осторожны, но добавление 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();
  })