Вложенный проект для тестирования Ruby Gem - PullRequest
1 голос
/ 16 мая 2011

При создании гема для конкретной среды приложения я вкладываю проект в гем в тестовой директории. Например, с конкретным гемом Rails я бы настроил структуру каталогов, например:

Rakefile
Gemfile
attached.gemspec
lib/attached.rb
lib/...
test/Gemfile
test/app/...
test/...

Для тестирования я настраиваю вложенный проект Gemfile, используя gem 'attached', path: '...', и запускаю rake test внутри тестовой директории. Можно ли добавить задачу в мой основной Rakefile, которая позволит мне запускать тесты в моем подпроекте, не переходя сначала в каталог?

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Я всегда использую драгоценный камень enginex, чтобы помочь мне настроить мои драгоценные камни с помощью встроенного приложения рельсов.

В корне Rakefile пишут:

require 'rake/testtask'

Rake::TestTask.new(:test) do |t|
  t.libs << 'lib'
  t.libs << 'test'
  t.pattern = 'test/**/*_test.rb'
  t.verbose = false
end

task :default => :test

Они не используют вложенный Gemfile, вместо этого они загружают проект Rails внутри test_helper.rb, а rails является зависимостью разработки / тестирования гема.

Чтобы проверить драгоценный камень:

gem install enginex

Или проверьте источник . Этот драгоценный камень включен в рельсы 3.1 как новый генератор плагинов.

0 голосов
/ 18 мая 2011

Самый простой способ (и я думаю, что он менее подвержен ошибкам) ​​состоит в том, чтобы иметь задачу вроде:

task :test do
  system('cd test; bundle exec rake test')
end

Другой, более сложный способ - включить все «подзадачи» в корневой каталог.Rakefile добавляет обязательное условие к каждому из них, которое изменит текущий каталог, например:

task :change_dir do
  puts 'changing dir'
  Dir.chdir('test')
end

namespace :sub do
  load 'test/Rakefile'
end
Rake::Task.tasks.select{|t| t.name.start_with?('sub:')}.each do |task|
  task.prerequisites.insert(0, 'change_dir')
end

Я не уверен, как это будет работать с упаковщиком.

ПоследнийЯ бы порекомендовал вам взглянуть на структуру проекта, которую создает команда bundle gem.Сейчас я использую его для всех своих драгоценных камней, и я верю, что использование его позволит полностью устранить вашу проблему:)

...