私が欲しいのは、各スペックファイルでテスト対象のクラスを「要求」する必要がない方法です。
したがって、テスト対象のソースコードのルートを設定し、rspecがテストを自動的にマッピングする手段、または仕様をrubyファイルに自動的にマッピングするその他の手段があることを期待しています。
RailsのRspecでは、これは魔法のように起こりますが、これはRailsプロジェクトではなく、有用な情報を見つけることができません。
私が欲しいのは、各スペックファイルでテスト対象のクラスを「要求」する必要がない方法です。
したがって、テスト対象のソースコードのルートを設定し、rspecがテストを自動的にマッピングする手段、または仕様をrubyファイルに自動的にマッピングするその他の手段があることを期待しています。
RailsのRspecでは、これは魔法のように起こりますが、これはRailsプロジェクトではなく、有用な情報を見つけることができません。
プロジェクト内にlibフォルダーとspecフォルダーがあり、それぞれコードとスペックがあると想定しています。を作成しspec/spec_helper.rb
て追加
# project_name/spec/spec_helper.rb
$: << File.join(File.dirname(__FILE__), "/../lib")
require 'spec'
require 'main_file_within_lib_folder_that_requires_other_files'
これで、個々のスペックファイル内に、railsのような次の行を追加する必要があります。
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
あなたがしなければならないことは、を再定義することですObject.const_missing
。
この基本的な例を見つけて、ニーズに合わせて変更します(正しいパスを設定するなど)。
def Object.const_missing(name)
@looked_for ||= {}
str_name = name.to_s
raise "Class not found: #{name}" if @looked_for[str_name]
@looked_for[str_name] = 1
file = str_name.downcase
require file
klass = const_get(name)
return klass if klass
raise "Class not found: #{name}"
end