2

バックグラウンド:

Engine Yard の RailsInstaller 2 パッケージを使用しています。これは、Windows 7 x64 で Ruby 1.9.2-p290 と Rails 3.1.1 を意味します。

問題:

Ruby on Rails チュートリアルを試行し、autotest と spork を意図したとおりに動作させた後、rspec はテストが数秒で終了したことを報告しましたが、実際に費やされた時間はそれよりもはるかに長く、30 分近くかかりました。スクリーンキャストで観察された一瞬の反応とはかけ離れています。そのほとんどは、Rails の読み込み時間 (spork がプリロード段階で費やす時間からも明らか) と、JRuby がどのように遅いか (Linux 上の Ruby と比較して) に起因する可能性があることを認識していますが、rspec ごとに 15 秒以上です。平均して実行する(ロード時間を考慮して、スポークの有無にかかわらず)は、TDDにはまったく受け入れられません。Linuxに切り替える以外に、数秒程度に短縮する方法は他にありますか?

編集:この質問の言い方に何か問題がありますか?

4

3 に答える 3

1

Rails のロード時間はかなり長いです。あなたが言ったように、これはTDDキラーになる可能性があります。

この問題に対処する方法には、いくつかのアプローチがあります。

  1. Guard を使用して、fs イベントを通知し、spork を使用して分岐レールを呼び出し、スペック ファイルまたは SUT (テスト対象) ファイルの変更で実行される rspec テストを呼び出します。
  2. Rails に依存するクラス (コントローラー、アクティブ レコード モデル) の外にロジックを移動し、代わりにプレーンな Ruby オブジェクトを使用します。

私は両方のアプローチを使用します。2 番目のアプローチには多くの利点があります。

  • レールに依存せずにクラスを分離してテストできます
  • レールをロードせず、特定の必要なクラスのみをロードするため、テストは非常に高速に実行されます
  • 各クラス/モジュールがシステム全体の小さな部分を持つ SRP (単一責任の原則) に向けてあなたを駆り立てます。
  • DRY (同じことを繰り返さないでください) を促進します。
  • DI (依存性注入) を使用して小さなオブジェクトにコンテキストを与え、テストと再利用を容易にします。

見なければならない:

于 2012-07-20T07:59:25.770 に答える
0

これはおそらく現時点で最高です。Windows での同一のセットアップは、Linux ではわずか数秒で済みます。Ruby 1.9.3 ではテストしていませんが、状況が大きく変わる可能性は低いです。

于 2012-02-18T09:10:52.253 に答える
0

私は最近、他の場所で言及されていない解決策を思いつきました:

VirtualBox で Ubuntu を実行し、プロジェクトのディレクトリを共有フォルダーとして構成しています。これは、Ubuntu ボックスが常にコードの最新バージョンを認識することを意味します。そのため、Linux CLI の時間を楽しみながら、Windows を開発プラットフォームとして維持できます。これまでのところ、このセットアップを約 1 週間しか使用していませんが、まだ欠点に遭遇していません。

于 2012-12-31T14:14:26.397 に答える