Как настроить следующий элемент/тест с помощью web-component-tester и полимера так, чтобы (1) запрос XHR завершился, (2) затем запустилось утверждение, в результате чего (3) тест прошел ?
/мой-элемент.html
<dom-module id="my-element">
<template>
<iron-request id="req"><iron-request>
</template>
<script>
(function() {
'use strict';
Polymer({
is: 'my-element',
properties: {
newVal: Object
},
fetchedStuff: function(ironRequest) {
this.set('newVal', ironRequest.response);
console.log('This gets logged after tests run.'); // <--- this is firing too late!
},
ready: function() {
this.$.req.resolveCompletes = this.fetchedStuff;
this.$.req.send({url: '/my.json'});
}
});
})();
</script>
</dom-module>
/мой-элемент-тест.html
<test-fixture id="basic">
<template>
<my-element></my-element>
</template>
</test-fixture>
<script>
suite('my-element tests', function() {
test('Item lengths should be equalled', function(done) {
element = fixture('basic');
flush(function() {
assert.equal(element.newVal, {"name": "Polymer"});
done();
});
})
});
</script>
Фон:
Мы хотели бы протестировать вызовы ajax без использования сервера Sinon, предоставленного в тестере веб-компонентов (то есть мы хотели бы сделать реальные вызовы xhr. Мы хотели бы сделать это, потому что Запросы xhr должны возвращать содержимое из файлов, которые автоматически создаются из другой системы.
FWIW, я пытался размещать обратные вызовы и обещания в разных местах, в том числе с использованием элемента iron-ajax, и я не могу найти идеального способа решить эту проблему. Единственное решение, которое я нашел до сих пор, — это создать событие под названием «executeTests», которое кажется крутым.