Внутри первого вызова (после ... Persistence.LOCAL) у вас есть объявление функции. В отличие от функций стрелок, он не будет поддерживать текущий контекст, поэтому, когда вы используете this.router
, , этот будет контекстом указанной выше функции.
Таким образом, предупреждение правильное, вы не используете маршрутизатор, определенный в классе, вы используете неопределенное свойство маршрутизатора в контексте функций. Вероятно, вы не видите какой-либо ошибки, потому что тогда нет внутреннего улова.
Самый быстрый способ исправить это - использовать функции стрелок во всех местах, например:
signinUser(email: string, password: string) {
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then(() => firebase.auth().signInWithEmailAndPassword(email, password)
.then(
response => {
...
Вы можете найти дополнительную информацию о здесь .
Вы должны поместить свой код expect(ChangeEmitter).to receive(:new)
над почтовым запросом. Когда вы ожидаете, что класс получит метод, ваша инструкция «ожидаем» перед вызовом контроллера. Ожидается, что что-то случится в будущем. Таким образом, ваш тест должен выглядеть примерно так:
it "calls the emitter" do
user_params = FactoryGirl.attributes_for(:user)
expect(ChangeEmitter).to receive(:new)
post :create, user: user_params
expect(response.status).to eq(200)
end
РЕДАКТИРОВАТЬ
Заметив, что вы цепляете действие «испустить» после вызова «нового», я понял, что я необходимо обновить мой ответ для вашего конкретного случая использования. Вам нужно вернуть объект (я обычно возвращаю шпиона или двойника), который может вызвать emit. Для получения дополнительной информации о разнице между шпионами и двойниками смотрите: https://www.ombulabs.com/blog/rspec/ruby/spy-vs-double-vs-instance-double.html [116 ]
По сути, шпион принимает любой вызванный им метод и возвращает сам себя, тогда как с помощью двойного числа вы должны указать, какие методы он может принимать, а какие возвращать. Для вашего случая я думаю, что шпион работает.
Итак, вы хотите сделать это так:
it "calls the emitter" do
user_params = FactoryGirl.attributes_for(:user)
emitter = spy(ChangeEmitter)
expect(ChangeEmitter).to receive(:new).and_return(emitter)
post :create, user: user_params
expect(response.status).to eq(200)
end