如何在cucumber的example中传递Array

实际上,还是传递字符……

看下面的例子👇

正文

当你想要在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