$compile не компилирует шаблоны в Karma/Jasmine

Я проверил это с PhantomJS и Chrome.

После этого вопроса я пытаюсь получить доступ к сгенерированному HTML-коду в модульных тестах с Karma:

it('Should do something', inject(function ($rootScope, $templateCache, $compile) {
  var scope = $rootScope.$new();
  scope.$digest();

  var template = $templateCache.get('/app/views/mytemplate.html');
  var compiler = $compile(template);
  var compiledTemplate = compiler(scope);
  console.log(compiledTemplate);
}));

Я обнаружил, что шаблон выбирается правильно и соответствует сырому HTML-файлу на моем компьютере. Но compiledTemplate никогда не компилируется правильно; По сути, Angular удаляет все теги ng с тегами и заменяет их комментариями, независимо от того, какими должны быть их значения.

Например,

<ol ng-repeat = "foo in foos">
  <li>foo</li>
</ol>

Всегда будет заменен на:

<!-- ngRepeat: foo in foos -->

Даже если я специально установил scope.foos в некоторый массив в модульном тесте. Я попытался добавить методы waitsFor и setTimeout, чтобы заставить Karma ждать до 8 секунд, и это все еще поведение, которое я получаю. Я также протестировал свойства CSS и обнаружил, что Карма правильно их устанавливает. Например, div ng-show или ng-hide будет иметь ожидаемые свойства CSS, но для директив, которые должны изменять скомпилированный HTML, все заменяется комментарием.

Есть ли способ получить измененную Angular DOM-структуру HTML в модульных тестах? То есть не только HTML-код с удаленными угловыми элементами, но и какой Angular на самом деле его изменяет?

1 ответ

Решение

Вы должны сделать $digest() после компиляции. После дайджеста, compiledTemplate.find('ol')scope.foos как некоторый массив) должен возвращать ng-повторяющиеся элементы.

Другие вопросы по тегам