使用 Capybara on Rails 访问路径传递 id

Ivá*_*ero 0 ruby rspec ruby-on-rails path capybara

我正在开发一个 Rails 项目,其中我使用 Rspec 与 Capybara 进行单元测试以访问页面。我有这个真实的网址:课程 IDhttp://localhost:3000/teacher/courses/2778/audience在哪里2778,此页面显示了登录的教师该课程中的学生(观众)。

routes.rb的这个资源看起来像这样:

...
namespace :teacher do
  ...
  resources :courses, except: [:delete] do
    member do
      ...
      get :audience
      ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,我已经以特定教师的身份登录,并且有一个@course代表相关课程的变量,现在,我需要直接转到该网址或路径。我已经尝试过:

visit '/teacher/courses/@course.id/audience'
visit '/teacher/courses/' + @course.id + '/audience'
visit '/teacher/courses/#{@course.id}/audience'
Run Code Online (Sandbox Code Playgroud)

但这些都没有奏效。

我怎样才能访问这条路径?

eng*_*nky 5

字符串插值需要双引号"尝试:

visit "/teacher/courses/#{@course.id}/audience" 
Run Code Online (Sandbox Code Playgroud)

假设visit "/teacher/courses/12/audience"@course.id 为 12。

现在的问题就是这些。

第一个示例: visit '/teacher/courses/@course.id/audience'是一个显式字符串,因此它尝试'/teacher/courses/@course.id/audience'作为真实 URL 进行访问。

第二个例子: visit '/teacher/courses/' + @course.id + '/audience'会引发,TypeError: no implicit conversion of Fixnum into String因为 id 是一个 Fixnum 并且不能隐式转换。(可以解决,@course.id.to_s但看起来很脏)

第三个示例: visit '/teacher/courses/#{@course.id}/audience'也是一个显式字符串,因为缺少双引号,其行为方式与第一个示例相同,只是它尝试使用 /teacher/courses/#{@course.id}/audience 作为包含大括号。

另外,正如 @MusannifZahir 指出的那样,您应该确保这门课程存在于您的测试数据库中。我的回答假设这不是实际问题。