如何在 ember 测试中枚举所有路由名称
how to enumerate all route names in an ember test
我们需要在测试中从 router.js
获取所有路由名称的列表。最好是较低级别的测试 (unit/integration).
上下文用例:我们有所有路由所需的元数据。此测试是为了确保在添加新路由时添加了适当的元数据,并且没有忘记。
类似的问题 here and 已被问到,但尝试 adopt/modify 测试中的这些解决方案并未取得成果。
以下是我在验收测试中如何做到的。
以下是我不喜欢此解决方案的地方:
- 它的开销比验收测试高。
- 它使用私有 API。
虽然在 ember-inspector 中使用了私有 API,因此如果它在未来出现故障,我们应该能够引用他们在那个 repo 中所做的任何更改。
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
module('Acceptance | route metadata test', hooks => {
setupApplicationTest(hooks);
test('we can get route names', function(assert) {
const router = this.owner.lookup('router:main');
router.setupRouter();
const routeNames = router._routerMicrolib.recognizer.names;
assert.ok(Object.keys(routeNames).length > 0);
});
});
测试只断言我们有路由名称。对于原始用例,更改此代码以遍历 routeNames
.
是微不足道的
ember-cli: 3.5.0
node: 8.12.0
通过 this issue
发现需要调用 setupRouter()
我们需要在测试中从 router.js
获取所有路由名称的列表。最好是较低级别的测试 (unit/integration).
上下文用例:我们有所有路由所需的元数据。此测试是为了确保在添加新路由时添加了适当的元数据,并且没有忘记。
类似的问题 here and
以下是我在验收测试中如何做到的。
以下是我不喜欢此解决方案的地方:
- 它的开销比验收测试高。
- 它使用私有 API。
虽然在 ember-inspector 中使用了私有 API,因此如果它在未来出现故障,我们应该能够引用他们在那个 repo 中所做的任何更改。
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
module('Acceptance | route metadata test', hooks => {
setupApplicationTest(hooks);
test('we can get route names', function(assert) {
const router = this.owner.lookup('router:main');
router.setupRouter();
const routeNames = router._routerMicrolib.recognizer.names;
assert.ok(Object.keys(routeNames).length > 0);
});
});
测试只断言我们有路由名称。对于原始用例,更改此代码以遍历 routeNames
.
ember-cli: 3.5.0
node: 8.12.0
通过 this issue
发现需要调用setupRouter()