2016-12-20 3 views
3

У меня есть приложение Angular 2, над которым я работаю, что по некоторым причинам совместимости с устаревшим кодом необходимо получить некоторую информацию через атрибуты, используемые в компоненте приложения. Например, HTML, который запускает угловое 2 приложение будет выглядеть следующим образом:Угловое определение атрибута nativeElement в компоненте приложения

<myApp id="xyz" areaDone="true" value="" requestID="abc"> Loading ... </myApp> 

Однако, когда я пытаюсь написать несколько модульных тестов вокруг поведения, которое, как предполагается, происходит на основе наличия и значении этих атрибутов , они имеют значение null/undefined.

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

 let native = this.elementRef.nativeElement; 
     this.requestID= native.getAttribute("requestID"); 

Итак, есть путь через стендовые/поставщик, чтобы заставить нативный элемент, который должен иметь ожидаемые атрибуты?

ответ

3

Вы можете позвонить по телефону this.elementRef.nativeElement.attribute, и он вернет NamedNodeMap (http://www.w3schools.com/jsref/prop_node_attributes.asp) ваших атрибутов.

Синтаксис для получения материала из NamedNodeMaps не страшно, это меня получение x1 атрибуты объекта d3 в одном из моих тестов

const nodeAttributes = compiled.querySelector('#temp-draggable-link-line').attributes as NamedNodeMap; 
expect(nodeAttributes.getNamedItem('x1').value).toEqual(200); 
+0

Я понимаю, что, как и к тому, как увидеть атрибуты в но мне нужно знать, как установить их в исходном элементе. Насколько я могу судить, тестовый жгут просто запускает его с помощью тега div с атрибутом id, и я не могу найти способ вставить в конструктор издеваемую ElementRef или настроить тестовый бегун, чтобы передать те атрибуты должны быть прочитаны из dom – jspriggs

+0

Извините, полностью непонятый вопрос. я просто просмотрел код, и похоже, что есть только четыре ссылки на функцию 'insertRootElement' в @ angular/core/testing. Если функция определена, она принимает только один параметр (id) и где он используется, он вызывает эту функцию, а затем сразу вызывает фабрику компонента. Я не думаю, что это будет возможно, если вы не разветвите это или не пишите. –

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