2

我刚刚将 cucumber 安装到一个新的 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
4

3 回答 3

8

它只会在功能目录树中查找相同级别或更低级别的文件。因此,如果您尝试仅运行 features/campaigns/donating_campaigns.feature 中的场景,它将找不到 step_definitions 目录。

您可以使用 --require 标志明确告诉黄瓜在运行您的功能之前要包含什么。例如:

bundle exec cucumber --require features/step_definitions features/campaigns/donating_campaigns.feature
于 2013-06-10T18:40:45.640 回答
5

我在我的一个项目中遇到了这个问题。当我将一个功能项目的 cucumber.yml 文件与有问题的项目进行比较时,我发现功能文件设置-r featuresstd_optsand rerunassignments 上。当我将它添加到损坏的项目中时,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

于 2013-12-10T21:33:09.827 回答
0

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

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为您定义了许多步骤。然而,这在最近的版本中被改变了并且被遗漏了。希望这能让你朝着正确的方向开始。坚持下去

于 2013-05-20T05:55:32.110 回答