Таким образом, в принципе нет информации о том, как опустить блоки конфигурации/запуска/поставщика на модули, не выполняя приказ об упорядочении загрузки файлов для модульных тестов. Предположим следующее:Поистине насмешливые провайдеры
// dependency chain for providers:
// aaa <- bbb <- ccc
angular.module('module0').provider('bbb', [
'aaaProvider',
function (aaaProvider) {
// aaaProvider definition
...
});
angular.module('module1').provider('ccc', [
'bbbProvider',
function (bbbProvider) {
// bbbProvider definition
...
});
angular.module('module1').controller('controller', [
function() {
// controller definition
}]);
Теперь предположим, что мы пишем модульный тест для controller
. Как мы это сделаем?
module('module1');
inject(function ($controller, $rootScope) {
...
});
Упс, у нас есть проблема. module('module1')
приведет к определению поставщика для ccc
, который имеет зависимость от bbb
, который имеет зависимость от aaa
. Поэтому, если мы не предотвращаем определение провайдера для ccc
, запущенного на module1
, мы будем запускать код, который не имеет ничего общего с controller
, который мы тестируем на модуле.
Мы можем высмеять bbb
, используя module(function ($provide) { ... });
обозначение, и таким образом нам не нужно будет загружать module0
.
Но это не решает проблему для ccc
. У меня нет возможности остановить его.
Вопрос: Есть ли способ, чтобы остановить module1
запуск определения ccc
провайдера, который не имеет ничего общего с controller
мы модульное тестирование?
Вещей я пытался до сих пор: определение
Override в единичном испытании:
angular.module('module1').provider('ccc', [function() {}]);
Это жизнеспособное решение, хотя это означает, что много рефакторинга для меня (это огромное приложение с сотнями контроллеров, директивы, провайдеры работают блоки и т.д.) – mostruash
Это лучший совет для новых проектов. –
Хм, так прошло некоторое время с момента ответа на этот вопрос. С помощью этого подхода, как вы можете тестировать отдельные поставщики внутри 'module1internal', не запуская других поставщиков в модуле? – mostruash