2017-02-22 41 views
1

Немного тестирующего новичка здесь, я пытаюсь написать некоторые тесты Jasmine/Karma для контроллера. Мне дали образец теста для работы и сборки, и здесь в аргументе для функции блока it был передан $controller. Это приводит к тому, что тест проходит нормально.

Я успешно написал тесты для другого контроллера для этого приложения, и я не видел $controller, когда-либо проходившего там. Поэтому я стараюсь следить за тем, что знаю, но в тот момент, когда я удаляю $controller, тест терпит неудачу, потому что он ищет зависимости (которые я должен давать через $provide.value в ...?).

Вот код контроллера -

(function() { 
    'use strict'; 

    angular 
    .module('myApp') 
    .controller('EntryAddController', EntryAddController); 

    function EntryAddController($scope, $state, moment, $sanitize, dogList, catList, months, frequencies, EntryFactory, $modal, toastr, $log) { 
    var vm = this; 
    var now = moment(); 
    var tomorrow = now.add(1, 'days').toDate(); 
    var to = now.subtract(1, 'days').add(12, 'months').toDate(); 

    vm.fromDay = tomorrow; 
    vm.minDay = tomorrow; 

    start(); 

    function start() { 
     //some logic here 
    } 
})(); 

Вот пример кода, я получил (обратите внимание на it блок) -

(function() { 
    'use strict'; 



describe('Entry Add Controller', function(){ 

    describe('EntryAddController', function() { 

     var vm, $rootScope, $controller; 

     beforeEach(module('myApp')); 

     beforeEach(function() { 
     inject(function(_$rootScope_, _$controller_) { 
      $rootScope = _$rootScope_; 
      $controller = _$controller_; 
     }); 
     }); 

     describe('EntryAddController', function() { 
     var $scope; 

     beforeEach(function createChildScopeForTheTest() { 
      $scope = $rootScope.$new(); 
     }); 

     afterEach(function disposeOfCreatedChildScope() { 
      $scope.$destroy(); 
     }); 

     it('expects fromDate and toDate to be defined', function($controller) { 
      vm = $controller('EntryAddController', { $scope: $scope }); 

      expect(vm.fromDay).toBeDefined(); 
     }); 

     }); 
    }); 
    }); 

})(); 

Так почему же, когда я удаляю $controller от аргумента функция в блоке it, это вызывает эту ошибку?

Error: [$injector:unpr] Unknown provider: dogListProvider <- dogList <- EntryAddController 

В чем разница между этими двумя версиями it блока?

it('expects fromDate and toDate to be defined', function($controller) { 
    vm = $controller('EntryAddController', { $scope: $scope }); 

    expect(vm.fromDay).toBeDefined(); 
}); 

против

it('expects fromDay to be defined', function() { 
    vm = $controller('EntryAddController', { $scope: $scope }); 

    expect(vm.fromDay).toBeDefined(); 
}); 

ответ

0

Единственный параметр, который можно включить для функции в качестве it() утверждения done (Jasmine Asynchronous Support)

it("should support async execution of test preparation and expectations", function(done) { 
    value++; 
    expect(value).toBeGreaterThan(0); 
    done(); 
}); 

Тот факт, что вы называете это $controller в вашем функция не имеет значения, она эффективно будет функцией done, а не вашим контроллером.

Необходимо удалить этот параметр из функции и устранить неисправность Неизвестный провайдер.

+0

Спасибо! Я подумал, что это так, но не был на 100% уверен. – cssun25