2016-01-26 1 views
0

У меня есть класс PostDecorator в app/decorators/post_decorator.rb. У него есть метод, который вызывает метод Devision current_user. Это выглядит следующим образом:Draper Decorator spec не в состоянии использовать Devise current_user метод

class PostDecorator < Draper::Decorator 
    delegate_all 

    def voter 
    h.current_user 
    end 
end 

У меня есть PostDecorator спецификации в spec/decorators/post_decorator_spec.rb

require 'spec_helper' 

describe PostDecorator, type: :decorator do 
    let(:post) { FactoryGirl.create(:post) } 
    let(:user) { FactoryGirl.create(:user) } 
    before { allow(helper).to receive(:current_user) { user } } 

    describe 'voter' do 
    it 'returns the current_user' do 
     expect(post.voter).to eq user 
    end 
    end 
end 

Когда я запускаю это я получаю неопределенную ошибку методы:

<Draper::HelperProxy:0x007fb1c4f85890 ... does not implement: current_user 

Gem Версия:

  • draper (1.4.0)
  • RSpec рельсы (3.4.1)
  • DEViSE (3.5.5)

Также следует отметить все, что в моем app/lib директории автоматически загружена. В application.rb У меня есть config.autoload_paths << Rails.root.join('lib')

ответ

0

Проблема связана Дрейперу. Decorator не может получить доступ к вспомогательным методам после отправки электронной почты ActionMailer.

This is an open issue on Draper's GitHub

Чтобы решить эту проблему, я модернизировали Factory User путем добавления confirmed_at:

factory :user do 
    ... 
    confirmed_at DateTime.now 
end 

Таким образом Разрабатывают не будет отправлено письмо подтверждения.

+0

просто наблюдение, но его вопрос, похоже, не имеет никакого отношения к почтовой программе любого рода, насколько я могу судить. Или я что-то пропустил? – MilesStanfield

+0

@MilesStanfield Если пользовательский объект не имеет подтвержденного значения, Devise выдает подтверждение по электронной почте. Вопрос, который я связал, также лучше документирует. – Hunter

1

Две вещи, которые, я думаю, вам нужно сделать.

1.) Добавить тест Разрабатывает помощник в тесты декоратора,

RSpec.configure do |config| 
    config.include Devise::TestHelpers, type: :decorator 
end 

2.) вы на самом деле нужно sign_in ожидать post.voter к эк фактически существующих пользователей

require 'spec_helper' 

describe PostDecorator, type: :decorator do 
    let(:post) { FactoryGirl.create(:post) } 
    let(:user) { FactoryGirl.create(:user) } 
    before do 
    sign_in user 
    end 

    describe '.voter' do 
    it 'returns the current_user' do 
     expect(post.voter).to eq user 
    end 
    end 
end