如何为MiniTest扩展LOAD_PATH?

fea*_*ool 1 ruby-on-rails minitest padrino

[旁白:我正在慢慢回答我自己的问题" 在autotest或Guard下安装,配置和运行minitest的简明配方 "]

我的环境: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
Run Code Online (Sandbox Code Playgroud)

这是测试助手:

# 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
Run Code Online (Sandbox Code Playgroud)

最后,驱动它的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}" }
Run Code Online (Sandbox Code Playgroud)

那么:require_relative '../../../test_helper'用可靠且易于记忆的方式更换脆弱物需要什么require 'test_helper'

DAd*_*dYE 5

你需要添加libs:

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

或者如果你用ruby直接调用它:

$ ruby -Itest test/test_file.rb
Run Code Online (Sandbox Code Playgroud)