在 Rails 上使用 Capybara 访问传递 id 的路径

Visit path passing id with Capybara on Rails

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

我对该资源的 routes.rb 如下所示:

...
namespace :teacher do
  ...
  resources :courses, except: [:delete] do
    member do
      ...
      get :audience
      ...
    end
  end
end

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

visit '/teacher/courses/@course.id/audience'
visit '/teacher/courses/' + @course.id + '/audience'
visit '/teacher/courses/#{@course.id}/audience'

但这一切都没有用。

如何访问这条路径?

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

visit "/teacher/courses/#{@course.id}/audience" 

假设@course.id 为 12,这将变为 visit "/teacher/courses/12/audience"

现在就是这些问题。

第一个例子: 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 作为 URL 包含在花括号中。

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