在 Ruby/Capybara case 语句中使用正则表达式会引发 'Regex matched 0 arguments' 错误

Using regex in Ruby/Capybara case statement throws 'Regex matched 0 arguments' error

我正在使用 Cucumber/Selenium 网络驱动程序和水豚测试网站 我正在尝试在我的 step_definition 中构建一个案例声明,这样我网站上的每个页面就不会有多个 "given"。

我有以下内容:

Given /^I am on the .+ page$/ do |page_name|
  case page_name
  when "I am on the home page"
   visit ('/')
  else
    puts "page #{page_name} not found"
  end 
end

当我 运行 cucumber 在终端中进行 运行 测试时,我得到

Given I am on the home page # features/step_definitions/home_page.rb:3 Your block takes 1 argument, but the Regexp matched 0 arguments. (Cucumber::Glue::ArityMismatchError) features/step_definitions/home_page.rb:3:in /^I am on the .+ page$/' features/homepage.feature:5:inGiven I am on the home page'

我试过将正则表达式包装在 ()、{}、[]、" "、'' 以及它们的各种组合中,我检查了代码的缩进,我 认为 正确。

我已将我的正则表达式输入到在线验证器中,它可以很好地识别它。

您的块采用参数 page_name 但您的 Regex 中没有捕获组用作该参数。你可能想要像

这样的东西
Given /^I am on the (.+) page$/ do |page_name|

所以 .+ 部分被捕获并作为 page_name

传递