【问题标题】:how to enumerate all route names in an ember test如何在 ember 测试中枚举所有路由名称
【发布时间】:2018-02-13 21:06:25
【问题描述】:

我们需要在测试中从router.js 获取所有路由名称的列表。最好是较低级别的测试(单元/集成)。

上下文用例:我们有所有路由都需要的元数据。此测试是为了确保在添加新路由时添加了适当的元数据,并且不会忘记。

类似的问题 herehere 已被问到,但在测试中采用/修改这些解决方案的尝试并未取得成果。

【问题讨论】:

  • 仅供参考,router.router 已被 router._routerMicrolib 取代。容器不再驻留在应用程序上,而是驻留在应用程序实例上。这就是现有解决方案不再有效的原因。

标签: ember.js ember-router ember-testing


【解决方案1】:

这就是我在验收测试中如何做到的。

这是我不喜欢这个解决方案的地方:

  • 它具有更高的验收测试开销。
  • 它使用私有 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多