2011-05-15 22 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