Я пытаюсь написать приемочный тест, чтобы узнать, соответствует ли определенное свойство в модели для маршрута, которое я посещаю, что я утверждаю.Получить модель маршрута после посещения в приемочном тесте
Я не выводя информацию на страницу с помощью этого маршрута, вместо этого я буду сохранять часть ее в localstorage с помощью ember addon. Поэтому я обычно понимаю, что могу использовать find()
, чтобы найти элемент на странице и проверить его содержимое, чтобы определить, разрешена ли модель, но это не сработает для этого случая.
В тесте приема у меня есть эта установка (с использованием мираж BTW)
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:
После пытаясь ответить Даниэлю Кмаку, я до сих пор не могу его передать. Это маршрут код, я работаю с
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, а также модельную функцию этого маршрута? –