假设我想测试用户是否能够填写表单来创建新项目。我需要访问的路线是:new_user_project_path(:user_id)
。
所以,我的功能rspec现在看起来像这样:
feature "User creates a project" do
scenario "Logged in User creates a project" do
login_with_oauth #this sets current_user
visit new_user_project_path
fill_in 'Title', :with => 'Colchasdadasdasoneta'
fill_in 'Description', :with => 'lalalssalsalas'
click_in 'Create Project'
end
end
正如您所知,我无法使用此访问new_user_project_path,因为它需要传递:user_id。我的问题是,如何访问current_user?或者测试这种东西的正确方法是什么?
答案 0 :(得分:1)
您的路线有问题。而不是直接解决问题,这很容易,更好地仔细检查你的代码逻辑。
您不应将用户ID定义为路径参数来创建新项目。相反,项目实例应由current_user启动。
要将新项目与用户关联,只需在控制器中执行
@project = current_user.projects.new
总结:
答案 1 :(得分:0)
假设login_with_oauth
是您编写的规范帮助程序方法,您可以返回它设置的用户。然后你可以这样做:
feature "User creates a project" do
scenario "Logged in User creates a project" do
user = login_with_oauth
visit new_user_project_path(user)
如果这不起作用,并且login_with_oauth
是您无法控制的(比如它来自某个库),您可以从数据库中取出第一个用户。这假设数据库中没有其他用户,但不应该因为您的测试应该是干净且自主的。然后做:
feature "User creates a project" do
scenario "Logged in User creates a project" do
login_with_oauth
user = User.first
visit new_user_project_path(user)