Неожиданная ошибка запроса с $HttpBackend (AngularJS)

Я использую HttpBackend, чтобы имитировать некоторые ответы Http для некоторых вызовов, которые делает мое приложение Angular.

Однако я получаю сообщение об ошибке "Неожиданный запрос: [object Object] undefined" при запуске тестов.

Я знаю, что обычно эта ошибка означает, что вы пропустили или неправильно набрали один из запросов $http, которые делает приложение, поэтому оно не может найти ответ. Но моя ошибка не является конкретной, как другие, которые обычно говорят, как "Неожиданный запрос: GET api/call", поэтому я не знаю, что не так.

Кто-нибудь когда-либо сталкивался с этой конкретной ошибкой раньше?

Образец кода

угловой контроллер:

app.controller( 'ctrl', 
   [ '$scope' , '$http' , '$location', function( $scope, $http, $location ) {
        $http.get(
            "/api/1.0/id/" + id, 
            {
                headers: getAuthHeaders()
            }
        ).success(function( data ){ //... })]
);

жасминовый тест:

it('should ...', function(){
  httpBackend.whenGET('/api/1.0/id/*').respond(200,{"test":"Test"});
  //...
});

person Angel Gao    schedule 24.03.2015    source источник
comment
getAuthHeaders() что возвращает эта функция? Я думаю, что ваши заголовки не то, что вы думаете :)   -  person MoshMage    schedule 24.03.2015
comment
Я почти уверен, что заголовки верны, потому что мои вызовы API действительно работают. Кроме того, не должно иметь значения, какой заголовок для макета, верно?   -  person Angel Gao    schedule 24.03.2015
comment
Так что это только макет http, который терпит неудачу? -- Может быть, если заголовки будут дурацкими (например, [object Ojbect] вместо acual Object), это может свести все на нет.   -  person MoshMage    schedule 24.03.2015
comment
Да только притворяться не получается. Мой фактический API вызывает всю работу.   -  person Angel Gao    schedule 24.03.2015
comment
Это очень странно, Неожиданный запрос обычно выдает, когда запрос, который вы сделали, был неправильно сформированным запросом. тут я теряюсь..   -  person MoshMage    schedule 24.03.2015


Ответы (1)


Я попробовал ваш код и проверил сам. Я добавляю функцию для установки идентификатора, но я думаю, что у вас есть что-то похожее:

 //PRESET ID
 var id = 'deajedgwe1e213df';

        //FUNCTION TO CAPSULATE API CALL
        this.callApi = function () {
            http.get(
                "/api/1.0/id/" + id,
                {
                    //headers: getAuthHeaders()
                }
            ).success(function( data ){
                    console.log('success', data);
                }).error(function (err) {
                    console.log('error', err);
                });
        };

        //FUNCTION TO SET ID
        this.setId = function (ID) {
              id = ID;
        };

затем я скопировал ваш тест и изменил его следующим образом:

  it('should ...', function(){
      ctrl.setId('test123ID');

      httpBackend.expectGET('/api/1.0/id/test123ID').respond(200,{"test":"Test"});

      ctrl.callApi();

      httpBackend.flush();
      httpBackend.verifyNoOutstandingExpectation();
      httpBackend.verifyNoOutstandingRequest();
  });

это работает. альтернатива, которую вы могли бы сделать это:

   it('should ...', function(){

      httpBackend.expectGET(/api/i).respond(200,{"test":"Test"});

      ctrl.callApi();

      httpBackend.flush();
      httpBackend.verifyNoOutstandingExpectation();
      httpBackend.verifyNoOutstandingRequest();
  });

это тоже работает, но только проверяет, был ли вызван /api... Я не знаю, если это то, что вы хотите проверить.

Я думаю, что основная проблема заключается в вашей нотации звездочки при вызове API. попробуйте изменить свой код, как мой. если это не должно помочь, вы должны вызвать функцию заголовка.

Удачи.

person Anke Wenz    schedule 15.12.2015