在RSpec的帮助程序规范中转到路由不起作用

时间:2017-01-18 07:03:21

标签: ruby-on-rails rspec devise ruby-on-rails-5

我有一个"添加朋友"用户个人资料页面中的按钮(用户#show),我想测试该按钮没有显示在您自己的个人资料页面上(current_user' s)

我在视图文件(users / show.html.haml)中有这个:

- unless current_user == params[:id]
  = button_to 'Add friend', path

我想在UsersHelper中为它创建一个帮助器:

module UsersHelper
  def correct_user
    current_user == params[:id]
  end
end

所以在视图中它将是:

- unless correct_user
  = button_to 'Add friend', path

如何在RSpec中测试?

在我的spec/helpers/users_helper_spec.rb文件中,我有:

it 'checks correct user' do
  sign_in( user = create(:user) )
  user2 = create(:user, name: 'foobar')
  get :show, params: { id: user2.to_param }
  expect(helper.correct_user).to be true
end

我为登录用户的sign_in(current_user)Devise助手提供了这个:

RSpec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :helper
end

基本上测试失败了,因为get :show, params: { id: user2.to_param }正在给我一个错误,让我觉得在帮助程序规范中无法进行路由。

如何测试correct_user助手?我应该将它移动到控制器(所以我可以在规范中做get :show, params: { id: user2.to_param })并在那里进行测试吗? (并将其作为辅助方法helper_method :correct_user

1 个答案:

答案 0 :(得分:1)

您不应该使用params[:id]来检查user是否与current_user匹配。您必须在控制器操作中使用User获取params[:id]。比如说,您将其存储在变量@user中。然后,您可以修改您的帮助程序并查看如下:

助手:

module UsersHelper
  def can_add_friend?(user)
    current_user != user
  end
end

查看:

- if can_add_friend?(@user)
  = button_to 'Add friend', path

现在为这个辅助方法编写rspec会更容易。

it 'checks correct user' do
  sign_in( user = create(:user) )
  user2 = create(:user, name: 'foobar')
  expect(helper.can_add_friend?(user2)).to be true
  expect(helper.can_add_friend?(user)).to be false
end
相关问题