2017-06-21 235 views
2

在黃瓜紅寶石裏嘗試了一些新的東西,我遇到了他們的黃瓜表達式。黃瓜紅寶石 - 黃瓜表達式

我試過註冊參數:

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 workGiven "the expression" does not work - 這應該和簡單的來返回步驟片段

有誰知道我在做什麼錯?

編輯

原來,基本的「INT」黃瓜表達不工作或者,這應該是內置的。

Given "I want {int} potatoes" do |number| 
puts "#{number} potatoes" 
end 

不匹配And I want 7 potatoes,作爲一個例子。

使用:

  • 黃瓜v3.0.0.pre.1
  • 黃瓜表達式V3.0.0
  • 紅寶石V2.4.1
+1

對於Ruby,Cucumber表達式可能實際上尚未實現。 [添加支持問題](https://github.com/cucumber/cucumber-ruby/issues/1002)仍處於打開狀態。 –

回答

2

黃瓜表達式可從V3.0.0 (見:https://github.com/cucumber/cucumber-ruby/issues/1002#issuecomment-332734877)。但是,添加一個自定義參數類型似乎目前沒有記錄,我不得不挖掘一下,以瞭解如何去做(參見Cucumber::Glue::Dsl class)。

在我來說,我想添加一個date參數類型相匹配的格式YYYY-MM-DD,所以我在support目錄中創建一個新的文件parameter_types.rb(我用黃瓜來測試Rails應用程序)具有以下內容:

ParameterType name:    'date', 
       type:    Date, 
       regexp:   /\d{4}-\d{2}-\d{2}/, 
       transformer:  ->(str) { Date.parse(str) }, 
       use_for_snippets: true 

ParameterType就像AfterBefore等的方法,可以使用以限定鉤。您可以通過將它們附加到相同的文件來添加更多的參數類型。

+0

生活更安全,看着錯誤的git回購,thx – lab419