没有这样的文件或目录.黄瓜:运行时::FeaturesLoader



Rails 3.2.14 app. Repo with cucumber autotests在"vendor"文件夹中。我需要解析*.feature文件。

雷神任务

require './config/environment'
require "gherkin/tag_expression"
require "cucumber/runtime"
require 'cucumber'
class DB < Thor
  include Thor::Actions
  #...
  desc 'test', 'test'
  def generate_reports
    tag_expression = Gherkin::TagExpression.new(["@mytag"])
    file_list = get_list_of_files("features/myproject/")
    features_object = Cucumber::Runtime::FeaturesLoader.new(file_list, [], tag_expression)
    puts features_object.features[0].feature_elements.inspect
  end
end

运行task时的错误:

/home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/feature_file.rb:58:in `initialize': No such file or directory - widget.feature. Please create a widget.feature directory to get started. (Errno::ENOENT)
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/feature_file.rb:58:in `open'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/feature_file.rb:58:in `source'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/feature_file.rb:37:in `parse'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/runtime/features_loader.rb:28:in `block in load'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/runtime/features_loader.rb:26:in `each'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/runtime/features_loader.rb:26:in `load'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/cucumber-1.3.15/lib/cucumber/runtime/features_loader.rb:14:in `features'
  from /home/user/work/interface/lib/tasks/db.thor:56:in `test'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/runner.rb:36:in `method_missing'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/command.rb:29:in `run'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/command.rb:126:in `run'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
  from /home/user/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/thor-0.19.1/bin/thor:6:in `<top (required)>'
  from /home/user/.rvm/rubies/ruby-2.1.1/bin/thor:23:in `load'
  from /home/user/.rvm/rubies/ruby-2.1.1/bin/thor:23:in `<main>'
  from /home/user/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `eval'
  from /home/user/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `<main>'

当我在IRB中执行该操作时,一切都有效。有什么问题吗?或者是否有更好的方法来解析特征文件?

Cucumber告诉你,它找不到你要求它解析的文件,我怀疑你的get_list_of_files方法正在返回一个没有路径的.feature文件列表?

比较这两个代码示例,其中存在一个特性features/a_feature.feature

f = Cucumber::FeatureFile.new("a_feature.feature")
f.parse([], [])
#=> Errno::ENOENT: No such file or directory - a_feature.feature. Please create a a_feature.feature directory to get started.

比较……

f = Cucumber::FeatureFile.new("features/a_feature.feature")
f.parse([], [])
#=> Cucumber::Ast::Feature(...)

我认为如果您的get_list_of_files返回正确的相对路径,或每个功能文件的完整路径,它应该像您期望的那样工作。

最新更新