在帮助程序规范中测试当前用户

时间:2016-01-20 15:42:49

标签: ruby-on-rails testing rspec helpers

我有这个非常基本的帮助器,它依赖于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 ?    它甚至值得测试吗?

6 个答案:

答案 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