转到 RSpec 中的辅助规范中的路由不起作用
Go to route in helper specs in RSpec does not work
我在用户个人资料页面 (users#show) 中有一个 "Add friend" 按钮,我想测试该按钮是否显示在您自己的个人资料页面 (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) 设计帮助用户登录的工具:
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
)
您不应该使用 params[:id]
来检查 user
是否匹配 current_user
。您必须在控制器操作中使用 params[:id]
获取 User
。比如说,你把它存储在一个变量 @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
我在用户个人资料页面 (users#show) 中有一个 "Add friend" 按钮,我想测试该按钮是否显示在您自己的个人资料页面 (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) 设计帮助用户登录的工具:
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
)
您不应该使用 params[:id]
来检查 user
是否匹配 current_user
。您必须在控制器操作中使用 params[:id]
获取 User
。比如说,你把它存储在一个变量 @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