在匹配之前修改cucumber中的步骤文本

在匹配之前修改cucumber中的步骤文本,cucumber,Cucumber,我们有一些配置问题,我们想通过在Cucumber中加入“特殊常量”来解决。例如,我们希望在步骤中使用文本“\uuuuuu USER\uuuuuu”,该文本应替换为运行应用程序的当前用户(以便我们可以测试用户权限等内容) 我试图采取的策略是这样做: BeforeStep do |step| domain = get_domain() username = get_username() step.text.gsub("__USER__", "#{domain}/#{usern

我们有一些配置问题,我们想通过在Cucumber中加入“特殊常量”来解决。例如,我们希望在步骤中使用文本
“\uuuuuu USER\uuuuuu”
,该文本应替换为运行应用程序的当前用户(以便我们可以测试用户权限等内容)

我试图采取的策略是这样做:

BeforeStep do |step|
    domain = get_domain()
    username = get_username()
    step.text.gsub("__USER__", "#{domain}/#{username}")
end

但是,在Forestep之前没有
。我试着在做场景之前使用
。。。结束
但场景中没有任何我可以使用的内容。我们如何用用户替换代码中的
“\uuuuuu USER\uuuuuuu”
实例(用当前日期替换
“\uuuuuu当前日期”
实例,等等)?

我通常使用cucumber通过视图登录用户,然后从那里运行测试

比如:

Given a user exists with email: "user@gmail.com", account_type: "customer" 
When I go to the homepage 
And I follow "Sign in" 
And I fill in "email" with "user@gmail.com" 
And I fill in "password" with "password" 
And I press "Sign in"

我认为这是一个编写更多声明性步骤的案例,例如当用户登录时
,而不是当我用“fred”填写“txt\u user\u name”时
。在这种情况下,编写步骤定义很容易:

When /^the user logs in$/ do
    domain = get_domain()
    username = get_username()
    fill_in "txt_user_name", :with => "#{domain}/#{username}"
end
您甚至可以引入一个步骤参数转换,将文本“the user”转换为您需要的用户名,这样您就不必重复进行更改:

CAPTURE_USER = Transform /^(the user)$/ do |this_isnt_used|
    domain = get_domain()
    username = get_username()
    "#{domain}/#{username}"
end

When /^(#{CAPTURE_USER }) logs in$/ do |user_name|
    puts "Logging in as #{user_name}"
end
如果用户登录,这将与步骤
匹配,并将正确的用户名作为参数传入

另外,回顾一下您的问题,您可以使用转换来完成您想要做的事情,并让它替换
\uuuuu USER\uuuuuu
的实例,但我自己不会选择该选项-这感觉会对场景的可读性产生太大的影响。你的选择