Интеллектуальные интегральные тесты: "link-to` href empty
Я пытаюсь написать тест интеграции компонентов, aa это сообщение в блоге, но мой компонент имеет link-to
для динамического маршрут и свойство href
не заполняются. Вот упрощенная версия того, что я пытаюсь сделать.
Мой шаблон компонента:
{{#link-to "myModel" model}}
И вот соответствующая часть моего теста:
this.set('model', {
id: 'myId',
name: 'My Name'
});
this.render(hbs`
{{my-component model=model}}
`);
assert.equal(this.$('a').attr('href'), '/myModel/myId'); // fails
Отображается link-to
, без атрибута href
. Если я зарегистрирую HTML в тесте, он выглядит так:
<a id="ember283" class="ember-view">My Name</a>
Есть ли что-то, что мне нужно сделать для моей "модели", чтобы получить link-to
для href? Я попытался посмотреть тесты на link-to
в ember и нашел эту часть тестов, что в основном то, что я делаю - предоставить POJO с помощью набора id
. Любые идеи?
Edit:
DEBUG: -------------------------------
DEBUG: Ember : 1.13.8
DEBUG: Ember Data : 1.13.10
DEBUG: jQuery : 1.11.3
DEBUG: -------------------------------
Ответы
Ответ 1
Оказывается, вы можете просто посмотреть маршрутизатор и сообщить ему, чтобы начать маршрутизацию в тестовой настройке, и это сработает. Из этот коммит из @rwjblue:
// tests/helpers/setup-router.js
export default function({ container }) {
const router = container.lookup('router:main');
router.startRouting(true);
}
// tests/integration/components/my-component-test.js
import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
import setupRouter from '../../helpers/setup-router';
moduleForComponent('my-component', 'Integration | Component | my component', {
integration: true,
setup() {
setupRouter(this);
}
});
Ответ 2
Если вы просто хотите проверить href
в порядке, лучше использовать setupRouter
вместо startRouting
. startRouting
пытается обработать начальный переход к исходному URL-адресу, и это может быть проблематично.
// tests/helpers/setup-router.js
export default function({ container }) {
const router = container.lookup('router:main');
router.setupRouter();
}
https://github.com/emberjs/ember.js/blob/d487061228a966d8aac6fa94a8d69abfc3f1f257/packages/ember-routing/lib/system/router.js#L202
Ответ 3
Какую версию Ember вы используете? Я помню это раньше, и теперь он работает в моем приложении (хотя я использую 1.13.8).
Кажется, что добавление href в мое приложение и на основе это вычисленное свойство оно должно быть привязано к представлению, если tagName
"a".
Помимо обновления Ember, лучше всего создать ember-скрипку или воспроизвести файл, если он сохранится.
Вы также можете взглянуть на https://github.com/intercom/ember-href-to.
Ответ 4
Вот как это сделать в Ember> 3
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';
module('Integration | Component | my-component', function (hooks) {
setupRenderingTest(hooks);
test('it has a link', async function (assert) {
this.owner.lookup('router:main').setupRouter();
await render(hbs'{{my-component}}');
assert.equal(this.element.querySelector('a').getAttribute('href'), 'some-url');
});
});