とりわけ、yaml ファイルに基づいていくつかの scaffold を実行する、作成したい Rails ジェネレーターがあります。
class MyGenerator < Rails::Generators::Base
...
def run_scaffolds
...
invoke 'scaffold', fields
...
end
end
here で説明されているように、足場ジェネレーターを呼び出しています。
問題は、単体テストでこれを実行しようとした場合です。
class ScaffoldTest < Rails::Generators::TestCase
tests MyGenerator
destination File.expand_path("../tmp", File.dirname(__FILE__))
setup :prepare_destination
test "run scaffolds" do
run_generator ["example_file.yaml"]
# doesn't get to here
end
end
エラーが発生します:
Errno::ENOENT: No such file or directory - .../tmp/config/routes.rb
これは、tmp ディレクトリに Rails アプリがないためです。私の質問は、レールアプリなしでは実行できない場合、どうすればこのジェネレーターをテストできるでしょうか? テストを実行するたびに、tmp フォルダーに新しい Rails アプリを作成するべきではありませんか?