当需要user_id时,对Rspec功能的怀疑

时间:2013-07-06 16:54:43

标签: ruby-on-rails testing rspec

假设我想测试用户是否能够填写表单来创建新项目。我需要访问的路线是: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?或者测试这种东西的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您的路线有问题。而不是直接解决问题,这很容易,更好地仔细检查你的代码逻辑。

您不应将用户ID定义为路径参数来创建新项目。相反,项目实例应由current_user启动。

要将新项目与用户关联,只需在控制器中执行

@project = current_user.projects.new

总结:

  1. 更改类似于上面的控制器代码
  2. 将您的路线恢复为传统资源。
  3. 然后,按照原样使用您的测试,但应该追加更多的期望。

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