2017-01-20 2 views
2

У меня есть проект построить с угловыми 1.5, с обновлением 1,6 Угловой команда решила отключить предварительно назначая привязки контроллера по умолчанию, и если вы хотите, чтобы дать им то вам нужно делать: $compileProvider.preAssignBindingsEnabled(true);

Это не большая проблема с самим приложением, все, что мне нужно сделать, это добавить конфигурационный заявление, в котором используется $compileProvider

.config(function($compileProvider){ 
    $compileProvider.preAssignBindingsEnabled(true); 
}) 

Но когда дело доходит до тестирования я работать в ловушку. У меня много модулей , ни один из которых не использует config.

И у меня есть тесты, которые тянут во всех моих модулей и запустить что-то вроде этого:

beforeEach(function() { 
    module('myModule'); 
    inject(function ($injector) { 
     $rootScope = $injector.get('$rootScope'); 
     $compile = $injector.get('$compile'); 
    }); 
    // do stuff, run tests 
}); 

Эти тесты все потерпеть неудачу сейчас. Просто исправить это, либо добавить конфиг для ВСЕХ моих модулей и имеют compileProvider работать на всех, или сделать что-то вроде этого:

// myModule1.spec.js 
beforeEach(function() { 
    module('myModule', function ($compileProvider) { 
     $compileProvider.preAssignBindingsEnabled(true); 
    }); 
    ... 
}); 

// myModule2.spec.js 
beforeEach(function() { 
    module('myModule2', function ($compileProvider) { 
     $compileProvider.preAssignBindingsEnabled(true); 
    }); 
    ... 
}); 

// myModule3.spec.js 
beforeEach(function() { 
    module('myModule3', function ($compileProvider) { 
     $compileProvider.preAssignBindingsEnabled(true); 
    }); 
    ... 
}); 

Но проблема у меня чуть меньше ста компонентов и хотел бы просто установить это в одном месте по всему миру.

Как я мог это сделать? Является ли это возможным?

ответ

0

Это

beforeEach(module(function ($compileProvider) { 
    $compileProvider.preAssignBindingsEnabled(true); 
})); 
... 
beforeEach(module('app')); 

или

angular.module('test.compile', []).config(function ($compileProvider) { 
    $compileProvider.preAssignBindingsEnabled(true); 
}) 
... 
beforeEach(module('test.compile')); 
... 
beforeEach(module('app')); 

Там может быть несколько beforeEach(module(...)) блоков в спецификации. Так как модули, загруженные таким образом, уложены в стопку, то с конфигурацией $compileProvider принадлежит верхний уровень describe.

+0

Да, как я уже упоминал выше, мне нужно сделать одну из этих двух вещей, но я надеялся, что смогу сделать это по всему миру. Это прилично, хотя ... создание модуля и копирование вставки его объявления – SoluableNonagon

+0

Как уже было сказано, вам нужно сделать это только один раз на «описать» верхнего уровня (вероятно, одно время на файл). Одна из целей блоков «описать» - обеспечить оптимальную структуру для 'beforeEach'. – estus

+0

Это, вероятно, проблема, которая должна быть решена с другого конца. Хорошо иметь независимые модули, которые можно тестировать отдельно. Тем не менее, все материалы, которые повторно используются между ними, но не повреждают тестируемость (например, конфигурация маршрута будет больно), должны содержаться в общих модулях. Вероятно, это должно быть 'angular.module ('common', []). Config (function ($ compileProvider) {...})' и все модули, которые полагаются на это поведение 'компилировать' или' common 'службы должны загрузить его. – estus

0

Я выяснил, как настроить этот параметр один раз для всего моего приложения.

В karma.conf.js, после включения углового mocks.js, включает в себя еще один файл, который настраивает модуль ngMock:

(function() { 
    'use strict'; 

    angular.module('ngMock').config(function($compileProvider) { 
     $compileProvider.preAssignBindingsEnabled(true); 
    }); 
})(); 

Это неподвижное все мои тесты.

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