Jos*_*ner 10 javascript integration-testing ember.js htmlbars
我正在尝试编写一个组件集成测试,这个博客文章,但我的组件有link-to一个动态路由,并且该href属性没有填写.这是我正在尝试做的简化版本.
我的组件的模板:
{{#link-to "myModel" model}}
Run Code Online (Sandbox Code Playgroud)
这是我测试的相关部分:
this.set('model', {
id: 'myId',
name: 'My Name'
});
this.render(hbs`
{{my-component model=model}}
`);
assert.equal(this.$('a').attr('href'), '/myModel/myId'); // fails
Run Code Online (Sandbox Code Playgroud)
在link-to被渲染,只是没有href属性.如果我在测试中记录HTML,它看起来像:
<a id="ember283" class="ember-view">My Name</a>
Run Code Online (Sandbox Code Playgroud)
我需要对我的"模型"做些什么才能获得link-tohref?我试着link-to在ember中查看测试,并发现这部分测试,这基本上就是我正在做的事情 - 提供一个带有id键集的POJO .有任何想法吗?
编辑:
DEBUG: -------------------------------
DEBUG: Ember : 1.13.8
DEBUG: Ember Data : 1.13.10
DEBUG: jQuery : 1.11.3
DEBUG: -------------------------------
Run Code Online (Sandbox Code Playgroud)
Jos*_*ner 11
事实证明,您只需查看路由器并告诉它在您的测试设置中开始路由,它就能正常工作.从这次提交的@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);
}
});
Run Code Online (Sandbox Code Playgroud)
这是在 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');
});
});
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您只想检查href可以,则最好使用setupRouter代替startRouting。startRouting尝试处理向初始URL的初始转换,这可能会出现问题。
// tests/helpers/setup-router.js
export default function({ container }) {
const router = container.lookup('router:main');
router.setupRouter();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2619 次 |
| 最近记录: |