Когда я настраивал тесты, используя только компиляцию и ссылку, директива запускается, но элемент существует только в limbo, потому что нижеприведенные тесты терпят неудачу, если я явно не добавляю их в DOM.Должен ли я добавлять исходный или скомпилированный/связанный элемент в тело при тестировании?
Я просто задаюсь вопросом, нужно ли добавлять предварительно скомпилированный angular.element(...)
в DOM или скомпилированный/связанный linkFr(scope)
, или если я собираюсь все это сделать неправильно.
Test Setup
beforeEach(inject(function ($rootScope, $compile) {
var linkFn, el;
rootScope = $rootScope;
scope = $rootScope.$new();
el = angular.element('\
<a id="testClickConfirm" href="" ng-click="deleteFn()" click-confirm="Test confirmation message">Delete</a>\
');
// $('body').append(el);
// The $compile method returns the directive's link function
linkFn = $compile(el);
// The link function returns the resulting DOM object
element = linkFn(scope);
$('body').append(element);
}));
Тесты
Пока я называю либо $('body').append(el);
или $('body').append(element);
все тесты проходят, в противном случае все они терпят неудачу.
it('should be added to dom',function(){
expect(element).toExist();
expect(element).toBeInDOM();
expect(element).toBeVisible();
expect(el).toExist();
expect(el).toBeInDOM();
expect(el).toBeVisible();
expect($('#testClickConfirm')).toExist();
expect($('#testClickConfirm')).toBeInDOM();
expect($('#testClickConfirm')).toBeVisible();
}));
Не могли бы вы предоставить сценарий Plunker? –
@MichaelBenford Весь код здесь и работает. Это просто вопрос, какой метод правильный, если они одинаковы или лучше другой метод. –
Я попросил сценарий, потому что сначала я не признавал вызовы toExist() ',' toBeInDOM() 'и' toBeVisible() 'и думал, что они были псевдокодами. Но после быстрого поиска Google я обнаружил, что они являются реальными функциями (и очень полезными, кстати). :) –