2013-03-23 28 views
1

[另:我在「a concise recipe for installing, configuring and running minitest under autotest or Guard」中慢慢回答我自己的問題]如何擴展MiniTest的LOAD_PATH?

我的環境:Ruby 2.0。 Padrino 0.10.7。 Minitest 2.6.2。 RackTest 0.6.2。

簡寫:什麼是擴展$ LOAD_PATH以包含我的測試目錄的最佳方式,所以我可以在我的測試文件中簡單地使用require 'test_helper'

長表格:

下面是一個示例測試文件。請注意0​​- 這需要跟蹤相對於test_helper的測試文件。

# file: test/models/api/v0/index_test.rb 
require_relative '../../../test_helper' 

describe 'nobody home' do 
    it 'fetch fails' do 
    get "/api/v0/a_uri_that_does_not_exist" 
    last_response.status.must_equal 404 
    end 
end 

這裏的測試助手:

# file: test/test_helper.rb 
PADRINO_ENV = 'test' unless defined?(PADRINO_ENV) 
require File.expand_path('../../config/boot', __FILE__) 

class MiniTest::Unit::TestCase 
    include Rack::Test::Methods 

    def app 
    Demo.tap { |app| } 
    end 
end 

最後,驅動它的Rake文件(由padrino產生,通過padrino rake test調用):

# file: test/test.rake 
require 'rake/testtask' 

test_tasks = Dir['test/*/'].map { |d| File.basename(d) } 
$stderr.puts("=== test_tasks = #{test_tasks}") 

test_tasks.each do |folder| 
    Rake::TestTask.new("test:#{folder}") do |test| 
    test.pattern = "test/#{folder}/**/*_test.rb" 
    test.verbose = true 
    end 
end 

desc "Run application test suite" 
task 'test' => test_tasks.map { |f| "test:#{f}" } 

所以:你會做什麼需要用一個可靠且容易記憶的require 'test_helper'取代脆弱的require_relative '../../../test_helper'

回答

5

你需要添加庫:

Rake::TestTask.new("test:#{folder}") do |test| 
    test.pattern = "test/#{folder}/**/*_test.rb" 
    test.verbose = true 
    test.libs << 'test' # <-- this 
end 

或者,如果你直接調用它與紅寶石:

$ ruby -Itest test/test_file.rb 
+0

實實在在你rocketh!那就是訣竅。 (對於額外的問題,請回到本問題第一行中引用的問題,並幫助我弄清楚如何使它與自動測試一起工作。'rake padrino test'工作,自動測試運行,但沒有找到任何文件。) – 2013-03-23 20:46:12