1

「rake」を実行すると、app/models ディレクトリにあるすべてのクラスの中からモデルの 1 つが読み込まれます。問題は、それは私がテストしているものではなく、バックグラウンドで実行し、メインのRailsアプリケーションのタスクを実行するためにスクリプト/ランナーで実際に使用されているモデルです。ファイルの最後で、上記のクラスの新しいインスタンスを作成し、クラスのメインを実行しています。

無期限にループするので、テスト コードで起動させたくありません。単体テストまたは Rake に、この他のクラスが何らかの形で関与するのはなぜですか?

残念なことに、私はこのコードのテストを書いていなかったので、いくつか書き始めることにしましたが、すぐにやめました。

4

1 に答える 1

1

Rakeのせいかどうかはわかりません-:environment依存関係として追加すると、Railsインフラストラクチャ全体が起動するように感じます。これには、すべてのモデルファイルが必要になる可能性があります(これはかなりワイルドな推測です-私はしていませんまだ深くブートプロセスに従った)。

しかし、それが起こっているとしても、あなたのモデルが必要とされているようです。その時点で、すべての地獄が解き放たれます。

script / runnerを見ると、より便利なことに、railties / lb / commands / runner.rbを見ると、実行シーケンスは次のようになっているようです。

require 'boot' # boot the Rails app
eval(File.read(code_or_file)) # run what you asked for

その2行目(実際にはrunner.rbの45行目あたり)はキーのように見えます。モデルを実行するコードを含む別のスクリプト(たとえば、/ lib内)を定義した場合はどうなるでしょうか。それはおそらくもっとRailsっぽい方法だと思います。そして、それはおそらくRakeがあなたのテストを台無しにするのを止めるでしょう...

于 2009-04-01T08:40:28.087 に答える