[旁白:我正在“a concise recipe for installing, configuring and running minitest under autotest or Guard”]
中慢慢回答我自己的问题我的环境:Ruby 2.0。帕德里诺0.10.7。最小2.6.2。 RackTest 0.6.2。
简短形式:扩展$ LOAD_PATH以包含我的测试目录的最佳方法是什么,所以我可以在我的测试文件中require 'test_helper'
?
长篇:
这是一个示例测试文件。请注意require_relative "../../../test_helper"
- 这需要跟踪相对于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
最后,驱动它的rakefile(由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_relative '../../../test_helper'
替换脆弱的require 'test_helper'
需要什么?
答案 0 :(得分:5)
你需要添加libs:
Rake::TestTask.new("test:#{folder}") do |test|
test.pattern = "test/#{folder}/**/*_test.rb"
test.verbose = true
test.libs << 'test' # <-- this
end
或者如果你直接用ruby调用它:
$ ruby -Itest test/test_file.rb