Cucumber::ArityMismatchError error after Transform

徘徊边缘 提交于 2020-01-06 05:00:46

问题


my step definition

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

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

my feature

login as user "ca@example.org"

I am getting this error

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

I am unable to figure out can anybody explain what was wrong with my cucumber transform.


回答1:


This is because the parentheses around ( user "([^"]*)" ) are capturing a group, then the actual email is capturing another one. to prevent that, use a non-capturing group, or don't group at all.

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

or

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


来源:https://stackoverflow.com/questions/3450137/cucumberaritymismatcherror-error-after-transform

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!