#ruby-on-rails #ruby #cucumber
#ruby-on-rails #ruby #cucumber
Вопрос:
Приложение Rails 3.2.14. Репозиторий с автотестами cucumber внутри папки «vendor». Мне нужно проанализировать *.feature
файлы.
Задача Thor
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, все работает.
В чем проблема? Или, может быть, есть лучший способ разбора функциональных файлов?
Ответ №1:
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
возвращает правильный относительный путь или полный путь для каждого функционального файла, он должен работать так, как вы ожидаете.