变换后的Cucumber :: ArityMismatchError错误

时间:2010-08-10 14:39:52

标签: ruby-on-rails ruby cucumber

我的步骤定义

Transform /^user "([^"]*)"$/ do | email |
  Person.find_by_email(email)
end

Given /^login as (user "([^"]*)")$/ do | user |
  login_as email
end

我的专辑

login as user "ca@example.org"

我收到此错误

And user "ca@example.org" has security role "contact"     # features/step_definitions/security_role_steps.rb:14
    And login as user "ca@example.org"                        # features/step_definitions/security_role_steps.rb:10
      Your block takes 1 argument, but the Regexp matched 2 arguments. (Cucumber::ArityMismatchError)
      features/step_definitions/security_role_steps.rb:10:in `/^login as (user "([^"]*)")$/'
      ./vendor/plugins/shway_skeletons/lib/shway_skeletons.rb:94:in `send':in `/^login as (user "([^"]*)")$/'
      features/manage_security_roles.feature:14:in `And login as user "ca@example.org"'

我无法弄清楚任何人都可以解释我的黄瓜变换出了什么问题。

1 个答案:

答案 0 :(得分:2)

这是因为用户“([^”] *)“周围的括号正在捕获一个组,然后实际的电子邮件正在捕获另一个。防止,使用非捕获组,或根本不分组。

Given /^login as user "([^"]*)"$/ do | user |
  login_as email
end

Given /^login as (?:user "([^"]*)")$/ do | user |
  login_as email
end