我正在嘗試編寫驗收測試,以查看模型中我訪問的路由的某個特性是否與我聲稱的一致。在驗收測試中訪問後獲取路由模型
我不會將信息輸出到此路線的頁面,而是使用一個燼插件將它的一部分保存到localstorage。所以通常我會意識到我可以使用find()
在頁面上找到一個元素,並檢查它的內容以確定模型是否已解析,但這不適用於這種情況。
在驗收測試我有這樣的設置(使用幻影順便說一句)
test('Returns a user', function(assert) {
// Generate a user
var user = server.create('user',{first_name: 'Jordan'});
// Visit the index page with the users short_url
visit('/' + user.short_url);
var route = this.application.__container__.lookup('route:index');
// Assert that the model the user we created by checking the first name we passed in
assert.equal(route.model.first_name,'Jordan','Model returns user with first name Jordan');
});
但是,當運行測試它示出了結果爲undefined
UPDATE:
後試圖丹尼爾Kmak的答案我仍然無法讓它通過。這是路由代碼我與
import Ember from 'ember';
import LocalUser from 'bidr/models/user-local';
export default Ember.Route.extend({
localUser: LocalUser.create(),
navigationService: Ember.inject.service('navigation'),
activate() {
this.get('navigationService').set('navigationMenuItems', []);
},
beforeModel() {
this.localUser.clear();
},
model(params) {
var self = this;
return this.store.queryRecord('user',{short_url: params.short_url}).then(function(result){
if(result){
self.set('localUser.user', {
"id": result.get('id'),
"first_name": result.get('first_name'),
"active_auction": result.get('active_auction'),
"phone": result.get('phone')
});
// transition to event page
self.transitionTo('items');
} else {
self.transitionTo('home');
}
});
}
});
的工作和測試看起來像這樣
import Ember from 'ember';
import { module, test } from 'qunit';
import startApp from 'bidr/tests/helpers/start-app';
module('Acceptance | index route', {
beforeEach: function() {
this.application = startApp();
},
afterEach: function() {
Ember.run(this.application, 'destroy');
}
});
test('Returns a user', function(assert) {
var user = server.create('user',{first_name: 'Jordan'});
visit('/' + user.short_url);
var route = this.application.__container__.lookup('route:index');
andThen(function() {
assert.equal(route.get('currentModel.first_name'),'Jordan','Model returns user with first name Jordan');
});
});
所有代碼的工作,因爲它應該在開發中。
我想嘗試使用'controller.model'而不是'route.model'以避免異步行爲 – artych
那麼如何讓控制器在測試中可訪問?我嘗試將查找更改爲'controller:index',但我仍然無法訪問它 – Jordan
您可以分享您訪問的路由的路由器代碼和user.short_url的示例值,以及該路由的模型函數嗎? –