无法从 Cucumber 2.3.2 中的 scenario.file 获取场景的文件名

Can't get a scenario's filename from scenario.file in Cucumber 2.3.2

我在 Rails 应用中有此代码 /features/support/hooks.rb:

After do |scenario|
  if scenario.failed?
    filename = "#{FAILED_DIR_PATH}/failed--#{scenario.file.gsub("features/","").gsub("/","-")}--#{scenario.line}.html"
    Capybara.save_page filename
  end
end

如果文件 /features/user_features/user_login.feature 中第 12 行的方案失败,那么,而不是默认的水豚页面转储文件名

tmp/capybara/capybara-5654648798738734.html

转储将以更好的文件名保存:

tmp/capybara/failed--user_features-user_login.feature--12.html

所以如果有很多失败,我立即知道哪个转储是正确的。

这适用于 Cucumber 1.3.2。

今天我更新了 gems 并得到了 Cucumber 2.3.2 并得到了这个错误:

 undefined method `file' for #<Cucumber::RunningTestCase::Scenario:0x007f9598abb230>

如果我调试它,scenario 只有这些方法:

Cucumber::RunningTestCase::Scenario#methods: 

accept_hook?  exception  failed?  outline?  passed?  skip_invoke!  source_tag_names  source_tags  status  title   with_result

我唯一能找到文件名的地方是 scenario.exception.backtrace(深埋在 Capybara 文件下面)。

现在是否有可能获取脚本文件路径和脚本开始的行号?

在 Cucumber 2 中,filelinescenariolocation 的属性,而不是 scenario 本身的属性。将 scenario.file 替换为 scenario.location.file,将 scenario.line 替换为 scenario.location.line