2

とりわけ、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 アプリを作成するべきではありませんか?

4

1 に答える 1

1

モカを使用してジェネレーターへの呼び出しをスタブ化することにしました。

Rails::Generator.stubs(:invoke)
run_generator ["example_file.yaml"]

このソリューションを選択したのは、コードが正しい引数でジェネレーターを呼び出していることを確認でき、実際の Rails アプリでジェネレーターを実際に実行する必要がないためです。

于 2013-11-03T08:34:36.260 に答える