2015-02-12 2 views
0

Я пытаюсь проверить ответ http-вызова. Проблема в том, что она проходит независимо от того, какой код ответа я вставляю туда или данные ответа. Есть идеи? Благодаря!

Controller.js

$scope.getPresses = function() { 
    var pressRequest = { 
     method: 'GET', 
     url: localAPI.url + 'press/', 
     headers: requestHeaders 
    }; 
    $http(pressRequest) 
     .success(function(data) { 
      $scope.userPresses = data.results; 
     }) 
     .error(function() { 
      alert("We were not able to retrieve your press data"); 
     }); 
}; 

testController.js

describe('Get Presses', function() { 
     it("sets scope attributes for the user's presses", function() { 
      $scope.getPresses() 
      $httpBackend.expectGET('http://0.0.0.0:8000/api/press/', function() { 
       return { 
        Authorization: "Token fakeToken2903920932" 
       } 
      }).respond(304, 'responseData') 
      $httpBackend.flush() 
     }); 
    }); 
+1

0 Вы не проверяете ничего, кроме запроса. Для успешных запросов вам нужно проверить значение '$ scope.userPresses'. Я не знаю, как вы собираетесь тестировать «предупреждение» для состояния ошибки. По крайней мере, вы должны ввести '$ window' и запустить' $ window.alert' в вашем контроллере. Тогда вы можете высмеять '$ window' в своем тесте – Phil

+0

@Phil Я могу выполнить другие тесты (которые не указаны выше), но когда я помещал $ httpBackend в описание или он(), они не запускаются как будто их совсем нет. –

+0

Затем покажите остальную часть своего кода. – Phil

ответ

1

Ok, во-первых, избежать глобальных функций, таких как alert. Их трудно проверить. Вместо этого, вводят $window в контроллер и использовать

$window.alert("We were not able to retrieve your press data"); 

Теперь, как для теста, вы должны проверить фактические результаты. Например ...

var $window, $scope, $httpBackend; 

beforeEach(function() { 
    module('your.module', function($provide) { 
     $provide.value('$window', $window = jasmine.createSpyObj('$window', ['alert'])); 
    }); 

    // and however else you set up your $scope and $httpBackend vars 
}); 

it('assigns results to userPresses on success', function() { 
    $httpBackend.expectGET('http://0.0.0.0:8000/api/press/', function(headers) { 
     return headers['Authorization'] === 'Token fakeToken2903920932'; 
    }).respond({results: 'results'}); 

    $scope.getPresses(); 
    $httpBackend.flush(); 

    expect($scope.userPresses).toBe('results'); 
}); 

it('calls alert on error', function() { 
    $httpBackend.whenGet('http://0.0.0.0:8000/api/press/').respond(500); 
    $scope.getPresses(); 
    $httpBackend.flush(); 

    expect($window.alert).toHaveBeenCalled(); 
}); 
Смежные вопросы