Ответ 1
Здесь как предупреждающая директива тестируется в angular -ui/bootstrap.
Вот еще один простой набор тестов для директивы кнопок.
Вот несколько советов:
-
Обязательно сообщите тестировщику, какой модуль вы тестируете с помощью
beforeEach(module('myModule'))
. -
Если у вас есть внешние шаблоны в ваших директивах, вам нужно как-то предварительно кэшировать их для тестового бегуна. Тест-бегун не может асинхронно
GET
шаблонов. В бутстрапе мы вставляем шаблоны в javascript с шагом сборки и делаем каждый шаблон модулем. Мы используемgrunt-html2js
задачу grunt. -
В ваших тестах используйте
inject
помощник вbeforeEach
для ввода $compile и $rootScope и любых других служб, которые вам понадобятся. Используйтеvar myScope = $rootScope.$new()
, чтобы создать новую область для каждого теста. Вы можете сделатьvar myElement = $compile('<my-directive></my-directive>')(myScope);
, чтобы создать экземпляр вашей директивы и получить доступ к ее элементу. -
Если директива создает свою собственную область действия и вы хотите протестировать ее, вы можете получить доступ к этой области действия, выполнив
var directiveScope = myElement.children().scope()
- она получит дочерний элемент (сама директива) и получит для этого. -
Для тестирования тайм-аутов вы можете использовать
$timeout.flush()
, чтобы завершить все ожидания ожидания. -
Для тестирования promises помните, что при решении обещания он будет не вызывать свои обратные вызовы
then
до следующего дайджеста. Поэтому в тестах вы должны сделать это много:deferred.resolve(); scope.$apply();
.
Вы можете найти тесты для директив различной сложности в загрузочном репо. Просто загляните в src/{directiveName}/test/
.