我在PostDecorator
中有app/decorators/post_decorator.rb
个班级。
它有一个调用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
宝石版本:
另外我应该注意我的app/lib
目录中的所有内容都是自动加载的。在application.rb
我有config.autoload_paths << Rails.root.join('lib')
答案 0 :(得分: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
答案 1 :(得分:0)
该问题与Draper有关。 发送ActionMailer电子邮件后,Decorator无法访问辅助方法。
This is an open issue on Draper's GitHub
为了解决这个问题,我刚刚通过添加<li><a href=""></a></li>
:
confirmed_at
这样,Devise不会发送确认电子邮件。