Несколько замечаний, которые могут помочь:
ensure
зарезервировано для блока кодов, который вы хотите запустить независимо от того, что произойдет, поэтому причина, по которой ваш self.user
всегда будет nil
.Я думаю, что вы хотите, чтобы назначить пользователя на ноль, если есть исключение.В этом случае вместо этого следует использовать rescue
.
def set(user)
self.user = user
yield
rescue => e
self.user = nil
end
Что касается модульного теста, то вам нужно протестировать только метод .set
в классе CurrentUser
.Предполагая, что у вас все правильно подключено в вашем окружающем фильтре, вот пример, который может вам помочь:
describe CurrentUser do
describe '.set' do
let(:current_user) { create(:user) }
subject do
CurrentUser.set(current_user) {}
end
it 'sets the user' do
subject
expect(CurrentUser.user).to eq(current_user)
end
end
end
Надеюсь, это поможет!