Я пытаюсь проверить свои процессы регистрации и входа в систему, тесты интеграции прошли отлично до создания инициализатора для расширения объекта Session Ember-Simple-Auth с использованием свойства currentUser.Свойство асинхронной инициализации Ember undefined в тесте интеграции
Все корректно работает в браузере, его просто тесты в настоящее время не в состоянии все в действии sessionAuthenticationSucceeded в пути приложения на следующей строке:
this.get('session.currentUser').then(function(user) {
с: TypeError: Не удается прочитать свойство " затем»неопределенных
/routes/application.js
import Ember from 'ember';
import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin';
export default Ember.Route.extend(ApplicationRouteMixin, {
actions: {
sessionAuthenticationSucceeded: function() {
var self = this;
this.get('session.currentUser').then(function(user) {
if (user.get('account') && user.get('status') === 'complete'){
self.transtionTo('home');
} else {
console.log('Need to complete Registration');
self.transitionTo('me');
}
});
}
}
}
/initializers/custom-session.js
import Ember from 'ember';
import Session from 'simple-auth/session';
export default {
name: 'custom-session',
before: 'simple-auth',
initialize: function(container) {
// application.deferReadiness();
Session.reopen({
currentUser: function() {
var id = this.get('user_id');
if (!Ember.isEmpty(id)) {
console.log('getting the current user');
return container.lookup('store:main').find('user', id);
}
}.property('user_id')
});
// application.advanceReadiness();
}
};
/tests/integration/visitor-signs-up-test.js
test('As a user with valid email and password', function(){
var email = faker.internet.email();
signUpUser(email, 'correctpassword', 'correctpassword');
andThen(function(){
equal(find('#logged-in-user').text(), email, 'User registered successfully as ' + email);
equal(sessionIsAuthenticated(App), true, 'The session is Authenticated');
});
});
тест/помощники/регистрация-login.js
export function signUpUser(email, password, passwordConfirmation) {
visit('/register').then(function(){
fillIn('input.email', email);
fillIn('input.password', password);
fillIn('input.password-confirmation', passwordConfirmation);
click('button.submit');
});
}
Я попытался с помощью
application.deferReadiness()
, как вы можете видеть закомментированы в инициализаторе (также проходит в применении в данном случае), чтобы обеспечить запрос асинхронного завершен и пользователь доступен, но что тоже не работает.
Я использую Pretender для перехвата запросов api, но вызов api/v1/users/:id
вообще не производится во время тестов.
Странная деталь, она отлично работает в браузере.
Я пытаюсь понять, почему это не будет работать? Любое руководство будет оценено!
NB: Я также попробовал решение, указанное here и here с таким же результатом, как указано выше.