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

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

 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 

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

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

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

我的一个项目中遇到了这个问题。 当我将function项目的cucumber.yml文件与有问题的文件进行比较时,我发现function文件集-r featuresstd_optsrerun 。 当我将它添加到破碎的项目中时,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

我想你可能误解了什么步骤定义。 在features/step_definitions中,您可以在其中定义步骤。 所以看起来你有两个function包含你将要或已经写过的场景。 运行方案,您将看到需要定义的步骤定义。 您的方案的每一行一个。 现在,您需要使用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 

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