我正在使用场景表(multiline step arguments)使用内置的.diff来检查使用黄瓜的屏幕上的一些数据!黄瓜AST表上的方法。
我想检查与正则表达式匹配的内容。
Scenario: One
Then the table appears as:
| One | Two | Three |
| /\d+/ | /\d+/ | /\d+/ |
实际的表格看起来像
| One | Two | Three |
| 123 | 456 | 789 |
这个场景被翻译为“只要有一些数字,我不在乎”
失败的示例步骤实现:
Then /^the table appears as:$/ do |expected_table|
actual_table = [['One','Two', 'Three'],['123', '456', '789']]
expected_table.diff! actual_table
end
错误:
Then the table appears as: # features/step_definitions/my_steps.rb:230
| One | Two | Three |
| /\\d+/ | /\\d+/ | /\\d+/ |
| 123 | 456 | 789 |
Tables were not identical (Cucumber::Ast::Table::Different)
我尝试使用步骤变换将单元格转换为正则表达式,但它们仍然不相同。
转换代码:
expected_table.raw[0].each do |column|
expected_table.map_column! column do |cell|
if cell.respond_to? :start_with?
if cell.start_with? "/"
cell.to_regexp
else
cell
end
else
cell
end
end
end
提供了错误:
Then the table appears as: # features/step_definitions/my_steps.rb:228
| One | Two | Three |
| (?-mix:\\d+) | (?-mix:\\d+) | (?-mix:\\d+) |
| 123 | 456 | 789 |
Tables were not identical (Cucumber::Ast::Table::Different)
有什么想法吗?我被卡住了。
答案 0 :(得分:4)
在场景中使用正则表达式几乎肯定是错误的方法。黄瓜特征旨在由以业务为中心的利益相关者阅读和理解。
如何在更高级别编写步骤,例如:
Then the first three columns of the table should contain a digit
答案 1 :(得分:0)
如果没有从Ast :: Table编写自己的diff!
方法实现,就无法做到这一点。看看cucumber/lib/ast/table.rb
。在内部,它使用diff-lcs库进行实际比较,不支持正则表达式匹配。
答案 2 :(得分:0)
似乎你想以提供酷炫差异输出的方式来编写它。否则,我会考虑写这个,你只需检查行。它不会那么漂亮,也不会让你得到整张桌子的差异,但它就是它。
Then /^the table appears as:$/ do |expected_table|
actual_table = [['One','Two', 'Three'],['123', '456', '789']]
expected_table.raw.each_with_index { |row, y|
row.each_with_index { |cell, x|
actual_table[x][y].should == cell
}
}
end