2013-11-18 3 views
1

Я пытаюсь написать несколько тестов для моих вызовов отдыха, и я пытаюсь выяснить, как сделать уникальный вызов для отдыха за объявление it. Например:Jasmine + AngularJS unit test a rest call

describe('My testing',function() 
{ 
    var $scope; 
    var controller; 
    var httpBackend; 
    var http; 

    beforeEach(inject(function($rootScope,$controller,$http,$httpBackend) 
    { 
      $scope = $rootScope.new(); 
      http = $http; 
      httpBackend = $httpBackend; 
      httpBackend.when("GET","https://my/rest/call").respond([]); 
      controller = $controller('MyCtrl',{ 
       $scope:$scope, 
       $http:$http 
      }); 
    }));  

    it('my test',function() 
    { 
     expect($scope.results).toEquals([]); 
     httpBackend.flush(); 
    }); 
}); 

Работы просто отлично. Как я могу сделать это, чтобы я мог сделать уникальный вызов в каждом it? Например:

it('empty test',function() 
     {  
      httpBackend.when("GET","https://my/rest/call").respond([]); 
      expect($scope.results).toEquals([]); 
      httpBackend.flush(); 
     }); 


it('one test',function() 
     {  
      httpBackend.when("GET","https://my/rest/call").respond([{1:"one"}]); 
      expect($scope.results).toEquals([]); 
      httpBackend.flush(); 
     });  

ответ

2

Вы можете использовать expect вместо when. В отличие от when, который удовлетворяет всем запросам, которые соответствуют, expect выполнит только один запрос за раз. Таким образом, вы можете сказать, что вы хотите, чтобы он отвечал с каждым разом.

Просто имейте в виду, что тест не удастся, если запросы поступают в другом порядке, чем то, как сконфигурировано expect. Тесты также потерпят неудачу, если никогда не было сделано запрос, настроенный в expect.

+0

так подло надеть мой код все из '' .when' стать .expect' – Woot4Moo

+0

Основываясь на ваш вопрос, я так думаю. Документация $ httpBacked (http://docs.angularjs.org/api/ngMock.$httpBackend) имеет приятную таблицу, которая определяет различия между 'expect' и' when' – dnc253

0

Сначала удалите это. Когда в beforeEach, если вы ожидаете разные ответы, определите их в своем тесте. Во-вторых, что на самом деле делает звонок на удаленную службу. Я вижу только то, что вы настраиваете то, что должно быть возвращено, когда этот конкретный URL-адрес попал, но не обратился к серверу. Вот два испытания образцов

describe("inSearchDataSvc", function() { 

    var inSearchDataSvc; 

    beforeEach(module('app')); 

    beforeEach(function() { 

     //mockConfig = { dataServiceHostName: "http://myhost" }; 

     module(function ($provide) { 
      //  $provide.value('config', mockConfig); 
      // $provide.value('$q', mockQ); 
      // $provide.value('config', mockConfig); 
     }); 

     inject(function ($injector) { 
      inSearchDataSvc = $injector.get('inSearchDataSvc'); 
     }); 

    }); 

     it("should return resolved promise", function() { 

       $httpBackend.when('GET', /.*\/api\/insureds\/searchinsureds\?.*/).respond(200, { result: "result" }); 

       var searchCriteria = new InsuredSearchCriteria(); 

       $httpBackend.expectGET(searchUrl + "?clientId=&dateOfBirth=&emailAddress=&firstName=&includeExpiredInsureds=false&includeK12LineOfBusinessInsureds=false&lastName=&searchId="); 

       var promiseResult; 

       inSearchDataSvc.getInsureds(searchCriteria) 
        .then(function (result) { 
         promiseResult = result; 
        }); 

       $httpBackend.flush(); 

       expect(promiseResult.$resolved).toBe(true); 
       expect(promiseResult.result).toBe("result"); 
      }); 

      it("it should reject promise if server throws and error", function() { 

       $httpBackend.when('GET', /.*\/api\/insureds\/searchinsureds\?throwError=true/).respond(400, { error: "Bad Query" }); 

       var promiseResult; 
       var returnedError; 

       var searchCriteria = {throwError:true}; 

       $httpBackend.expectGET(searchUrl + "?throwError=true"); 

       inSearchDataSvc.getInsureds(searchCriteria) 
        .then(
         function (result) { }, 
         function (error) { 
         returnedError = error; 

        }); 

       $httpBackend.flush(); 

       expect(returnedError.data.error).toBe("Bad Query"); 
      }); 
}); 
Смежные вопросы