我有一个"添加朋友"用户个人资料页面中的按钮(用户#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
)
答案 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