2011-05-15 14 views
1

爲特定的應用程序框架創建gem時,我將一個項目嵌套在測試目錄中的gem中。例如,對於一個特定的Rails寶石我倒是安裝的目錄結構,如:用於測試Ruby Gem的嵌套項目

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

爲了測試,我設置使用gem 'attached', path: '...'和嵌套項目的Gemfile運行rake test test目錄裏面。是否可以添加一個任務到我的主Rakefile,這將允許我在我的子項目中運行測試,而不必首先更改到目錄中?

回答

1

我總是使用gem enginex來幫助我用集成的rails應用程序設置我的寶石。

在根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,而不是他們加載test_helper.rb和軌道內的滑軌項目寶石的開發/測試的依賴。

要檢查出的寶石:

gem install enginex 

或檢查source。這個寶石被包含在rails 3.1中作爲新的插件生成器。

0

最簡單的方法(我認爲是最錯誤俯臥),將有類似的任務:

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

其他更復雜的方式將包括在根Rake文件所有的「子任務」添加一個前提它們中的每一個,這將改變當前目錄,就像這樣:

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命令創建的項目結構。我現在用它來處理所有寶石,我相信利用它會使問題完全消失:)

+0

@psycho謝謝。我使用'bundle gem'提供的目錄結構,但它沒有提供任何測試結構。 – 2011-05-18 15:26:07

+0

所以如果你使用它,爲什麼你需要兩個gemfiles? – psyho 2011-05-19 07:27:56

+0

@psycho第二個文件用於測試項目。 'test'文件夾包含一個完整的Rails項目(包括Gemfile)。 – 2011-05-19 17:23:11