我有这个非常基本的帮助器,它依赖于Sorcery在控制器和助手中提供的<script type="text/javascript">
function show() {
document.getElementById("dThreshold").display ="block";
}
</script>
变量
current_user
我该如何测试这个助手?
def current_user_link
user_link current_user
end
def user_link(user, html_options = {}, &block)
link_to user.to_s, user, html_options, &block
end
我是否需要以某种方式存根describe UsersHelper do
describe '#current_user_link' do
it 'should return a link to the current user' do
expected_link = link_to current_user.name, current_user
???
expect(current_user_link).to eq expected_link
end
end
?
它甚至值得测试吗?
答案 0 :(得分:6)
这就是我解决它的方法。
helper
PSA:别忘了在Que - 1. Here is a questions ?
<p><a class="correct" href="#">Answer-1</a></p>
<p><a class="incorrect" href="#">Answer-2</a></p>
<p><a class="incorrect" href="#">Answer-3</a></p>
<p><a class="incorrect" href="#">Answer-4</a></p>
上打电话给你的方法。
答案 1 :(得分:2)
我试图在Rspec current_user
规范中使用ApplicationHelper
和Sorcery,但上述答案都不适用于我。
对我有用的是首先用FactoryGirl定义user
:
let(:user) { create(:user) }
然后,写一个这样的例子:
it "does stuff" do
allow(helper).to receive(:current_user).and_return(user)
expect(helper.some_method_using_current_user).to do_something
end
关键区别在于使用示例中的helper
对象。
答案 2 :(得分:1)
您可以stub
current_user
describe UsersHelper do
describe '#current_user_link' do
let(:user) { FactoryGirl.build(:user) }
let(:expected_link) { link_to user.name, user }
before { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) }
it { expect(current_user_link).to eq(expected_link) }
end
end
或将您的用户设置为会话 比你应该
let(:user) { FactoryGirl.create(:user) }
和
before { allow_any_instance_of(ActionDispatch::Request).to receive(:session).and_return(user_id: user.id) }
答案 3 :(得分:1)
最简单的解决方法是在spec中声明:
let(:current_user) { create(:user) }
答案 4 :(得分:0)
这对我有用:
describe UsersHelper do
describe '#current_user_link' do
it 'should return a link to the current user' do
user = FactoryGirl.create(:user)
allow_any_instance_of(UsersHelper).to receive(:current_user).and_return(user)
expected_link = link_to user.name, user
expect(current_user_link).to eq(expected_link)
end
end
end
在rails_helper.rb
你需要:
RSpec.configure do |config|
config.include Devise::Test::ControllerHelpers, type: :helper
end
答案 5 :(得分:0)
使用 RSpec 测试辅助模块时,您需要在 Rspec::ExampleGroups 目标中存根该方法...
allow_any_instance_of(RSpec::ExampleGroups::UsersHelper).to receive(:current_user).and_return user