如何在 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()