变换后的Cucumber :: ArityMismatchError错误

我的步骤定义

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"' 

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

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

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

要么

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