0

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

4

2 回答 2

1

你的路线有问题。与其直接解决很容易的问题,不如仔细检查您的代码逻辑。

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

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

@project = current_user.projects.new

综上所述:

  1. 更改类似于上面的控制器代码
  2. 将您的路线恢复到常规资源。
  3. 然后,按原样使用您的测试,尽管应该附加更多的期望。
于 2013-07-06T17:17:06.180 回答
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)
于 2013-07-06T17:17:35.850 回答