Ruby on rails 需要用户id时对Rspec功能的质疑

Ruby on rails 需要用户id时对Rspec功能的质疑,ruby-on-rails,testing,rspec,Ruby On Rails,Testing,Rspec,假设我想测试用户是否能够填写表单以创建新项目。我需要访问的路径是:new\u user\u project\u path(:user\u 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_proje

假设我想测试用户是否能够填写表单以创建新项目。我需要访问的路径是:
new\u user\u project\u path(:user\u 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

正如您所知,我不能使用这个visit new_user_project_路径,因为它需要传递:user_id。我的问题是,如何访问当前用户?或者,测试这种东西的正确方法是什么?

您的路线有问题。与其简单地直接解决问题,不如仔细检查代码逻辑

创建新项目时,不应将用户id定义为路径参数。相反,项目实例应该由当前用户启动

要将新项目与用户关联,只需在controller中执行即可

@project = current_user.projects.new
总之:

  • 更改与上述类似的控制器代码
  • 将您的路线恢复为常规资源
  • 然后,按原样使用测试,尽管应该附加一些期望值

  • 假设
    login\u with_oauth
    是您编写的spec helper方法,您可以让它返回它设置的用户。然后你可以做:

    feature "User creates a project" do
      scenario "Logged in User creates a project" do
        user = login_with_oauth
        visit new_user_project_path(user)
    
    如果这不起作用,并且使用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)
    

    当您使用_oauth登录_时,您是指定用户还是用户_id?HM1,nop。这是facebook omniauth登录…然后有人猜测一些用户ID并以他们的名字创建项目:)有趣。我认为拥有/users/:user\u id/项目是“Restful”的。我的意思是,假设我想测试查看与用户关联的所有项目的能力。理想情况下,路径应该是/users/:user_id/projects(index action)对吗?@HommerSmith,您提到的是多态url,在某些情况下也是一种传统的解决方案。然而,这与我们在这里讨论的问题无关。在这个问题中,您在url中公开了用于构建项目实例的用户id(在#new中),如果表单很简单,没有大问题,如果表单需要获取一些用户私有信息,您的代码会公开这些信息,因为每个人都可以通过添加用户id来访问此url。此外,在#创建和#更新中,如果您继续这种做法,您允许所有用户为其他用户创建和更新项目。