Ember 组件集成测试:`link-to` href 为空
Ember Component Integration Tests: `link-to` href empty
我正在尝试编写一个组件集成测试,la this blog post,但是我的组件有一个 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>
我需要对我的 "model" 做些什么才能让 link-to
有一个 href 吗?我试图查看 ember 中 link-to
的测试,发现 this part of the tests,这基本上就是我正在做的事情——提供一个带有 id
键集的 POJO。有什么想法吗?
编辑:
DEBUG: -------------------------------
DEBUG: Ember : 1.13.8
DEBUG: Ember Data : 1.13.10
DEBUG: jQuery : 1.11.3
DEBUG: -------------------------------
您使用的 Ember 是什么版本?我 remember 以前看到过这个,现在它似乎可以在我的应用程序中使用(尽管我使用的是 1.13.8)。
似乎在我的应用程序中添加了 href,并且基于 this computed property 如果 tagName
是 "a",它应该绑定到视图。
除了升级 Ember 之外,最好创建一个 ember-fiddle 或重现并在错误持续存在时提交错误。
事实证明,您只需查找路由器并告诉它在您的测试设置中开始路由,它就会工作。来自 this commit 来自 @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);
}
});
如果您只想检查 href
是否正常,最好使用 setupRouter
而不是 startRouting
。 startRouting
尝试处理从初始过渡到初始 URL,这可能会有问题。
// tests/helpers/setup-router.js
export default function({ container }) {
const router = container.lookup('router:main');
router.setupRouter();
}
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');
});
});
我正在尝试编写一个组件集成测试,la this blog post,但是我的组件有一个 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>
我需要对我的 "model" 做些什么才能让 link-to
有一个 href 吗?我试图查看 ember 中 link-to
的测试,发现 this part of the tests,这基本上就是我正在做的事情——提供一个带有 id
键集的 POJO。有什么想法吗?
编辑:
DEBUG: -------------------------------
DEBUG: Ember : 1.13.8
DEBUG: Ember Data : 1.13.10
DEBUG: jQuery : 1.11.3
DEBUG: -------------------------------
您使用的 Ember 是什么版本?我 remember 以前看到过这个,现在它似乎可以在我的应用程序中使用(尽管我使用的是 1.13.8)。
似乎在我的应用程序中添加了 href,并且基于 this computed property 如果 tagName
是 "a",它应该绑定到视图。
除了升级 Ember 之外,最好创建一个 ember-fiddle 或重现并在错误持续存在时提交错误。
事实证明,您只需查找路由器并告诉它在您的测试设置中开始路由,它就会工作。来自 this commit 来自 @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);
}
});
如果您只想检查 href
是否正常,最好使用 setupRouter
而不是 startRouting
。 startRouting
尝试处理从初始过渡到初始 URL,这可能会有问题。
// tests/helpers/setup-router.js
export default function({ container }) {
const router = container.lookup('router:main');
router.setupRouter();
}
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');
});
});