1

Я пытаюсь проверить свои процессы регистрации и входа в систему, тесты интеграции прошли отлично до создания инициализатора для расширения объекта 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 с таким же результатом, как указано выше.

ответ

1

я понял, проблема, оказывается, я не возвращался в user_id из api/v1/users/sign_in запроса Самозванец был, следовательно, перехватывать когда sessionAuthenticationSucceeded уволили, не было user_id доступны и, таким образом, currentUser никогда не обновляется/срабатывает.

Я оставлю весь код там, если он поможет кому-то другому. Комментарии или улучшения по-прежнему очень приветствуются!