运行单个功能时,Cucumber无法找到步骤

时间:2013-05-19 20:44:57

标签: ruby-on-rails cucumber bdd

我刚刚将黄瓜安装到一个新的rails项目中(第一次从头开始设置)并且在运行所有测试(bundle exec cucumber)时它运行得非常好但在我运行时找不到任何步骤单个要素文件。我该如何开始调试呢?

rails (3.2.13)
cucumber-rails (1.3.1)
cucumber (>= 1.2.0)

# file listing
features/
├── campaigns
│   ├── donating_campaigns.feature
│   └── viewing_campaigns.feature
├── step_definitions
│   └── campaign_steps.rb
└── support
    └── env.rb

3 个答案:

答案 0 :(得分:8)

它只会在features目录树中找到相同级别或更低级别的文件。因此,如果您尝试仅运行features / campaigns / donating_campaigns.feature中的方案,则无法找到step_definitions目录。

您可以使用--require标志在运行功能之前明确告诉黄瓜包含哪些内容。例如:

bundle exec cucumber --require features/step_definitions features/campaigns/donating_campaigns.feature

答案 1 :(得分:4)

我的一个项目中遇到了这个问题。当我将功能项目的cucumber.yml文件与有问题的文件进行比较时,我发现-r featuresstd_opts分配上的功能文件集rerun。当我将它添加到破碎的项目中时,Cucumber可以找到我的步骤定义。

这是我成功的cucumber.yml文件:

<%
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip -r features"
%>
default: <%= std_opts %> features
wip: --tags @wip:3 --wip features
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip -r features

感谢这位程序员指出我正确的方向:http://web.archive.org/web/20121026012412/http://old.thoughtsincomputation.com/posts/cucumber-step-definitions-and-autorequire-hell

答案 2 :(得分:0)

我认为您可能误解了步骤定义是什么。在features/step_definitions中您可以定义步骤。所以看起来你有两个功能包含你将要或已经编写的场景。运行方案,您将看到需要定义的步骤定义。您的方案的每一行一个。现在,您需要使用Capybara定义campaign_steps.rb文件中的步骤。对于一个虚构的例子,

Given /^a user visits the campaign page$/ do
  visit campaign_path
end

When /^the user submits valid campaign information$/ do
  fill_in "Email",    with: @user.email
  fill_in "Donation", with: @user.donation 
  click_button "donate"
end

Cucumber曾与web_steps.rb一起为您定义了许多步骤。但是,在最近的版本中,这已被更改并遗漏了。希望这能让你开始朝着正确的方向前进。坚持下去