1

Мне нужна помощь с моим контрольным тестом. У меня есть resolve с использованием ui-router. В своем тесте мне нужно выяснить, как обращаться с resolveexampleData.

config.js

angular.module('myModule') 
    .config(['$stateProvider', '$urlRouterProvider', 

    function($stateProvider, $urlRouterProvider) { 

     $stateProvider 
     .state('site', { 
      abstract: true, 
      resolve: { 
      exampleData: function(ExampleService) { 
       // ExampleService.get() makes an $http call 
       return ExampleService.get(); 
      } 
      }, 
      // etc 
     }) 
     .state('example', { 
      parent: 'site', 
      url:'/example', 
      controller: 'ExampleCtrl as example', 
      templateProvider: function($templateCache) { 
      return $templateCache.get('views/example.html'); 
      } 
     }); 

    }]); 

ПРИМЕР controller.js

angular.module('myModule') 
    .controller('ExampleCtrl', ['exampleData', 
    function(exampleData) { 

     var self = this; 
     self.exampleData = exampleData; 

     // self.exampleData should output something like 
     // [ 
     // {id: 1, title:'something'}, 
     // {id: 2, title:'something'}, 
     // {id: 3, title:'something'} 
     // ] 

    }]); 

ПРИМЕР controller.test.js

describe('Controller: ExampleCtrl', function() { 
     beforeEach(module('myModule')); 

     var ctrl; 

     beforeEach(inject(function($controller) { 
     ctrl = $controller('ExampleCtrl'); 
     })); 

     describe('initialization', function() { 
     beforeEach(function() {}); 

     it('should exist', function() { 
      expect(!!ctrl).toBe(true); 
     }); 

     it('should ...', function() { 
      // do something 
     }); 
     }); 

Когда я запускаю тесты, я получаю следующее сообщение об ошибке:

Unknown provider: exampleDataProvider <- exampleData <- ExampleCtrl 

Мой вопрос: что делать для того, чтобы проверить resolve в моем ExampleCtrl? ExampleService.get() - это услуга, которая вызывает вызов и возвращает $http и массив объектов.

+0

Мое решение работает ???? – ngLover

ответ

0

Тестирование resolve Метод $state - это не то, что вы хотите сделать. Он является частью углового и имеет соответствующие тесты.

Что вы должны сосредоточить в своих тестах - логика вашего приложения. Там должен быть раздел для тестирования. ExampleService (get возвращает обещание, get выдает запрос http и т. Д.) И тестирование для ExampleCtrl, которое должно убедиться, что контроллер обрабатывает данные должным образом. Но разрешение зависимостей не является тем, что должно быть проверено.

Что, imo, должно быть решением в этом случае является заменой exampleData, разрешающей ради испытания.

var exampleData = [ 
     {id: 1, title:'something'}, 
     {id: 2, title:'something'}, 
     {id: 3, title:'something'} 
    ]; 
    module('myModule', function($provide) { 
    $provide.value('exampleData', exampleData); 
    }); 

    beforeEach(inject(function($state) { 
    ctrl = $controller('ExampleCtrl'); 
    })); 
+0

Я получаю «Неожиданный запрос: GET/api/example», когда я запускаю тесты. 'ExampleService.get()' выполняет этот запрос, используя '$ resource'. – cusejuice

+0

Какой тест? Код, который вы отправили в OP, не запускает 'ExampleService' в контроллере. Так не может быть. У вас должно быть несколько тестовых наборов, и 'ExampleService' не издевается там – Lilly

0

Вам необходимо вручную создать экземпляр примера данных. У меня была такая же проблема, поэтому я использую этот метод для его решения. будет отлично работать и для вас.

describe('Controller: ExampleCtrl', function() { 
     beforeEach(module('myModule')); 

     var ctrl,exampleData; 

     beforeEach(inject(function($controller,ExampleService) { 
     exampleData = ExampleService.get(); 
     ctrl = $controller('ExampleCtrl',{exampleData}); 
     })); 

     describe('initialization', function() { 
     beforeEach(function() {}); 

     it('should exist', function() { 
      expect(!!ctrl).toBe(true); 
     }); 

     it('should ...', function() { 
      // do something 
     }); 
     }); 

 Смежные вопросы

  • Нет связанных вопросов^_^