实际上,还是传递字符……
看下面的例子👇
正文
当你想要在examples中传递一个Array时,要怎么做?直接传递?我们试试。
背景如下:
在文件search.feature
中,search_terms的数据是一个数组[ ‘chocolate’ , ‘Nigella Lawson’]:
Scenario Outline:
When I search for "<search_terms>"
Then I should get a list of "<recipe_title>"
Examples:
| search_terms | recipe_title |
| [ 'chocolate' , 'Nigella Lawson'] | White chocolate and mintmousse |
对应的step文件,如search_step.rb
,内容:
When(/^I search for "([^"]*)"$/) do |terms|
search_terms = terms
......
end
Then(/^I should get a list of "([^"]*)"$/) do |recipe_title|
......
end
这时如果直接在终端运行cucumber会报错,因为你的search_terms传递的是一个array。
在 Cucumber:10316 - Passing arrays in tables中有位mswinson提到了这个问题,然后有位叫Andy的回复了他。【蛮好玩的,有兴趣的可以看看。】
解决方法就是避开Array,传递String,用“,”来区分各个element,然后在step definitions中用split(/, /)
将其转换为Array。
比如上面的这个例子,可以这么来:
修改文件search.feature
内容:
Scenario Outline:
When I search for "<search_terms>"
Then I should get a list of "<recipe_title>"
Examples:
| search_terms | recipe_title |
| chocolate , Nigella Lawson| White chocolate and mintmousse |
在对应的step文件中, 使用search_terms = terms.split(/, /)
。
When(/^I search for "([^"]*)"$/) do |terms|
search_terms = terms.split(/, /) ## 这时search_terms就是一个array了
......
end
Then(/^I should get a list of "([^"]*)"$/) do |recipe_title|
......
end
OK,完成。
参考
Cucumber:10316 - Passing arrays in tables
嗯,就这么简单,可我还是想把它写出来,硬生生整出了一篇文章来……
enjoy :D