编写测试时如何检索路由的 model()?

How can I retrieve a route's model() when writing a test?

我有一条路线有自己的模型,它不是来自 Ember 商店(为了这个问题,假设它可以来自 "anywhere")。

  model() {
    return RSVP.hash({
      value: someCall()
    });
  }

this.owner.lookup('route:routeName').model() 似乎不起作用,this.owner.lookup('controller:controllerName').get('model.X') 或我尝试过的任何其他东西也不起作用。

https://guides.emberjs.com/v3.1.0/testing/testing-routes/

似乎也没有提到

您将如何在测试中检索路线的模型?

根据官方文档 (https://emberjs.com/api/ember/3.1/classes/EmberRouter),Ember 路由器似乎没有任何类型的 public 接口来获取模型。它可以在内部访问模型函数。这感觉有点老套,但我能够让它工作:

路由器:

import Route from '@ember/routing/route';
import { hash } from 'rsvp';

export default Route.extend({
  model() {
    return hash({
      value: 'wibble'
    });
  },

  getMyModel: function() {
    return this.get('model')();
  }
});

路由器测试:

import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';

module('Unit | Route | test', function(hooks) {
  setupTest(hooks);

  test('do something with the router model...', function(assert) {
    let route = this.owner.lookup('route:test');
    assert.ok(route);

    route.getMyModel().then(function(model) {
      console.log(model);
      assert.equal(model.value, 'wibble');
    });
  });
});