Выполнить тесты для другого приложения из файла грабли - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь выполнить тесты на огурец для проекта в грабельном файле в другом проекте.

В настоящее время я пытаюсь это:

system "cd /path/to/project;rvm use --create 1.9.2-p290@test; cucumber features/test.feature"

Это работает для компакт-диска, иКажется, что rvm работает, если я запускаю какой ruby ​​после использования rvm ... но проблема в том, что камень огурца, кажется, вызывается из текущей папки (не из приложения для тестирования папки).

ОшибкаЯ получаю это:

cucumber is not part of the bundle. Add it to Gemfile. (Gem::LoadError)

Кажется, что он использует локальную версию набора огурцов для огурца, а не набор @test.

Есть мысли по этому поводу?

Есть ли лучший способ запустить тесты на огурец для другого проекта, использующего rvm и другой пакет?

Ответы [ 2 ]

4 голосов
/ 30 апреля 2012

Я тоже пытался сделать то же самое;запустить тесты приложения (или любую задачу rake) из другого приложения «control».

Причина: (только чтобы мне не ответили «почему, черт возьми?»)

Я пытаюсь создать приложение (скорее как круиз-контроль.rb) который может отслеживать, планировать и просматривать спецификации для набора приложений.

После некоторого поиска в источнике Cruisecontrol я обнаружил, что Bundler предлагает решение;

Bundler.with_clean_env do 
  system "rake spec"
end

см. строку56 изhttps://github.com/thoughtworks/cruisecontrol.rb/blob/master/lib/platform.rb

Это выходит из пакета, и команда запускается без гемов управляющего приложения.

НО , как наиболее вероятно, команда использует bundle exec, тогда это перестает работать.

Bundler.with_clean_env { system "bundle exec rake spec" }

И вы сразу же вернулись к той же самой проблеме.Это вызвано тем, что некоторые переменные-упаковщики все еще существуют и наследуются вложенной оболочкой.Полное (очень хорошее) объяснение здесь .

Решение состоит в том, чтобы изменить метод with_clean_env на упаковщике следующим образом:

BUNDLER_VARS = %w(BUNDLE_GEMFILE RUBYOPT BUNDLE_BIN_PATH)
module Bundler
  def self.with_clean_env &blk
    bundled_env = ENV.to_hash
    BUNDLER_VARS.each{ |var| ENV.delete(var) }
    yield
  ensure
    ENV.replace(bundled_env.to_hash)     
  end
end

код выше здесь

Я поместил это в environment.rb моего управляющего приложения (вероятно, оно должно быть в инициализаторе?), и теперь я могу запустить спецификации другого приложения из управляющего приложения.

#in control app
result = nil
Dir.chdir(test_app_path) #move into test app
Bundler.with_clean_env { result = `bundle exec rake spec` } #run test apps specs
puts result #display result inside control app
0 голосов
/ 14 ноября 2011

Изменение ; в вашем скрипте на &&, кажется, работает.

...