编写测试时如何检索路由的 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');
});
});
});
我有一条路线有自己的模型,它不是来自 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');
});
});
});