2014-09-29 3 views
5

Im только начинается с полимера. Я пытаюсь выполнить тестирование тестового элемента, который имеет зависимости, и я хотел бы подделать/издеваться над ними. Я нашел рекомендацию Скотта Майлза о том, как издеваться над реализацией ядра-ajax. Я думал, что могу легко следовать этому шаблону, но это работает только до тех пор, пока мой элемент не импортирует элемент, который будет издеваться (ядро-ajax в этом случае). Если он импортирует его, тогда, когда тест пытается запустить, я получаюиспытания на полимерные единицы измерения смешивания

'Uncaught NotSupportedError: Не удалось выполнить' registerElement 'в' Document ': Ошибка регистрации для типа' core-ajax '. Тип с этим именем уже зарегистрирован. '

Если бы я мог сделать что-то вроде document.unregister элемента core-ajax и импортировать его снова в свой тест, Id будет намного счастливее dev !!! Полимер потрясающий, но если я не могу его протестировать, тогда он представляет серьезные риски (по крайней мере, при создании приложения, которое необходимо будет поддерживать/изменять)

Как вы, ребята, работаете вокруг этого? Я выкапывал репо на Polymer и PolymerLab, и большинство из них испытывали недостатки. До сих пор я не нашел много ссылок о том, как это сделать.

Спасибо за помощь!

Santiago

рекомендации

SCOTTS' была:

Вместо импорта ядро-Ajax/ядра-ajax.html, создать свой собственный основной-Аякс элемент.

<polymer-element name="core-ajax" attributes="response"> 
<script> 
    Polymer('core-ajax', { 
    attached: function() { 
     this.response = ['a', 'b', 'c']; 
    } 
}); 
</script> 
</polymer-element> 

Очевидно, что это всего лишь пример, фактическая реализация зависит от желаемого насмешливого поведения.

Это всего лишь один из способов его решения, есть много других. Мне интересно услышать, что вы находите (в) удобным.

+0

так же. Все ошибки в двойных включениях являются болезненными. Не уверен, как это сделать. – David

+0

Реферирование доступно по ссылке https://stackoverflow.com/questions/24531473/how-do-i-mock-polymer-core-ajax-for-unit-testing – dskrvk

ответ

0

Вы можете попытаться зарегистрировать его императивно с помощью js или расширить каждый отдельный элемент, который вы тестируете, и переопределить его свойства или методы, которые вы хотите высмеять. Я думаю, что это как раз. Это как мой Google-карты пользовательского элемента, я импортировать Google-карту и изменить вещи вокруг так:

<polymer-element name="core-gmaps" attributes="lat long mapzoom markerlat markerlong markertitle" extends="google-map"> 
    <template> 
     <style> 
     :host{ 
      width: 100%; 
     } 
     #vivaMap { 
      display: block; 
      height: 100%; 
      width: 100%;    
     } 
     </style> 
     <google-map id="vivaMap" latitude="0" longitude="0" zoom="18"> 
      <google-map-marker id="vivaMarker" title="" latitude="0" longitude=""></google-map-marker> 
     </google-map> 
    </template> 
    <script> 

    Polymer("core-gmaps",{ 
    ready: function(){ 

     var map = this.$.vivaMap; 
     map.latitude = Number(this.getAttribute('lat')); 
     map.longitude = Number(this.getAttribute('long')); 
     map.zoom = Number(this.getAttribute('mapzoom')); 

     var mapMarker = this.$.vivaMarker; 
     mapMarker.latitude = Number(this.getAttribute('markerlat')); 
     mapMarker.longitude = Number(this.getAttribute('markerlong')); 
     mapMarker.title = this.getAttribute('markertitle'); 
     /*map.addEventListener('google-map-ready', function(e) { 
      console.log('Map loaded!'); 
     });*/ 
    } 
    }); 
    </script> 
</polymer-element> 

Я до сих пор не уверен, что стоит это профессионально (я может в конечном итоге не использовать его) , но он был полностью достоин интеллектуально. узнал несколько приятных вещей. поскольку я расширяю google-карту, он регистрируется один раз и только один раз.

EDIT:
в моем случае я использовал готовое событие, потому что я не мог управлять картой по себе без него, по меньшей мере готовы. но вы можете выбрать обратный вызов события из методов жизненного цикла.
Список: here.
PS.: Да, я не использовал привязку данных, потому что я не мог. Карта Google api жаловалась на то, что она была NaN, поэтому мне пришлось ее бросить.

1

Этот вопрос немного старый. Понятно, что я бы предоставил обновление, так как это довольно распространенная ситуация.

Полимерный CLI - рекомендуемый подход для модульных испытаний. Полимерные элементы. Основная библиотека, которую он использует для тестирования, называется веб-компонентом-тестером (WCT). WCT поддерживает элементы заглушки.В принципе, если один из ваших тестов полагается на другой элемент для возврата данных, вы можете создать заглушку этого элемента, которая всегда возвращает согласованные данные.

JS в коде тестового устройства для определения втулочного элемента:

setup(function() { 
    replace('paper-button').with('fake-paper-button'); 
}); 

Элемента для тестирования:

<dom-module id='x-el'> 
    <template> 
    <paper-button id="pb">button</paper-button> 
    </template> 
</dom-module> 

В тестовом режиме исполнения, шаблон контента будет искоренен как:

<dom-module id='x-el'> 
    <template> 
    <fake-paper-button id="pb">button</fake-paper-button> 
    </template> 
</dom-module> 

https://www.polymer-project.org/1.0/docs/tools/tests#create-stub-elements

+0

Вы можете указать пример того, какая кнопка поддельной бумаги будет выглядеть? – abendigo

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