Draper Decorator 规范无法使用 Devise current_user 方法
Draper Decorator spec not able to use Devise current_user method
我在 app/decorators/post_decorator.rb
中有一个 PostDecorator
class。
它有一个调用 Devise 的 current_user
方法的方法。它看起来像这样:
class PostDecorator < Draper::Decorator
delegate_all
def voter
h.current_user
end
end
我在 spec/decorators/post_decorator_spec.rb
中有一个 PostDecorator
规范
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 版本:
- 德雷珀 (1.4.0)
- rspec-rails (3.4.1)
- 设计 (3.5.5)
另外我应该注意我的 app/lib
目录中的所有内容都是自动加载的。在 application.rb
我有 config.autoload_paths << Rails.root.join('lib')
我认为你需要做两件事。
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
这个问题与 Draper 有关。
Decorator 在发送 ActionMailer 电子邮件后无法访问辅助方法。
This is an open issue on Draper's GitHub
为了解决这个问题,我刚刚通过添加 confirmed_at
:
修改了用户工厂
factory :user do
...
confirmed_at DateTime.now
end
这样 Devise 就不会发送确认邮件了。
我在 app/decorators/post_decorator.rb
中有一个 PostDecorator
class。
它有一个调用 Devise 的 current_user
方法的方法。它看起来像这样:
class PostDecorator < Draper::Decorator
delegate_all
def voter
h.current_user
end
end
我在 spec/decorators/post_decorator_spec.rb
PostDecorator
规范
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 版本:
- 德雷珀 (1.4.0)
- rspec-rails (3.4.1)
- 设计 (3.5.5)
另外我应该注意我的 app/lib
目录中的所有内容都是自动加载的。在 application.rb
我有 config.autoload_paths << Rails.root.join('lib')
我认为你需要做两件事。
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
这个问题与 Draper 有关。 Decorator 在发送 ActionMailer 电子邮件后无法访问辅助方法。
This is an open issue on Draper's GitHub
为了解决这个问题,我刚刚通过添加 confirmed_at
:
factory :user do
...
confirmed_at DateTime.now
end
这样 Devise 就不会发送确认邮件了。