在 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 指出的那样,您应该确保该课程存在于您的测试数据库中。我的回答假设这不是实际问题。
我正在做一个 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 指出的那样,您应该确保该课程存在于您的测试数据库中。我的回答假设这不是实际问题。