在Cucumber Ruby中尝试一些新东西,我遇到了他们的Cucumber表达式。
我尝试过注册参数:
require 'cucumber/cucumber_expressions/parameter_type'
require 'cucumber/cucumber_expressions/parameter_type_registry'
Cucumber::CucumberExpressions::ParameterTypeRegistry.new.define_parameter_type(Cucumber::CucumberExpressions::ParameterType.new(
'optional_not',
String,
/n't| not|/,
lambda {|s| String.new(s)}
))
Cucumber::CucumberExpressions::ParameterTypeRegistry.new.define_parameter_type(Cucumber::CucumberExpressions::ParameterType.new(
'string_in_double_quotes',
String,
/"[^"]*"/,
lambda {|s| String.new(s)}
))
但是当我有一个步骤定义,如:
Given "{string_in_double_quotes} does{optional_not} work" do |thing, invert|
invert = invert.gsub(' ', '')
if invert == 'n\'t' or invert == 'not'
# Something here
else
# Something here
end
end
它不匹配Given "the expression" does work
或Given "the expression" does not work
- 它应该与之匹配,只需返回一个步骤摘录
有谁知道我做错了什么?
修改
结果证明基本的" int"黄瓜表达也不起作用,应该内置。
Given "I want {int} potatoes" do |number|
puts "#{number} potatoes"
end
与And I want 7 potatoes
不匹配,作为示例。
使用:
答案 0 :(得分:3)
黄瓜表达式可从v3.0.0获得(参见:https://github.com/cucumber/cucumber-ruby/issues/1002#issuecomment-332734877)。但是,添加自定义参数类型目前似乎没有记录,我不得不深入挖掘一下以了解如何操作(参见Cucumber::Glue::Dsl
class)。
在我的情况下,我想添加@if (this.Context.IsDebuggingEnabled)
{
<button type="button" class="btn btn-warning">Fill file</button>
<button type="button" class="btn btn-info">Export file</button>
}
参数类型以匹配格式date
,因此我在YYYY-MM-DD
目录中创建了一个新文件parameter_types.rb
(我' m使用Cucumber测试Rails应用程序),内容如下:
support
ParameterType name: 'date',
type: Date,
regexp: /\d{4}-\d{2}-\d{2}/,
transformer: ->(str) { Date.parse(str) },
use_for_snippets: true
是一种类似ParameterType
,After
等的方法,您可以使用它来定义挂钩。您可以通过将它们附加到同一文件来添加更多参数类型。