燃焼-Railsエンジンをテストするための代替アプローチ

本日は、2009年のRuby Hero Awardの受賞者の1人であるRubyの信者であり、有名な開発者であるPat Allanによる投稿の翻訳をご紹介します。 この報酬は何ですか? 昨年の受賞者は、有意義な学習コンテンツの作成、プラグインと宝石の開発、オープンソースプロジェクトへの参加など、最も実績のあるコミュニティメンバーに授与されます。 この賞は、最も自明な人々を称賛し、彼らにふさわしいという認識を与えるために創設されました。



今年11月5〜6日にキエフで開催されるRubyCカンファレンスでPetとチャットできます



先月のかなりの部分を私の最初のRailsエンジンの作成に費やしましたが、それでも完了しませんでした。作業自体はクライアント向けであったため、詳細については説明できません。



開発プロセス中に、Railsエンジンをテストする方法が必要であることがすぐに明らかになりました。 最も単純な単体テストを考慮せずに、統合テストのかなり一般的な方法は、アプリケーションのコピーをspec



またはtest



ディレクトリ内のレールに保存することです。



このアプローチは私には困難で信頼性が低いように思えたので、他のことを試してみることにしました。



目標は、包括的なテストをシンプルでわかりやすい方法で整理することでした。テスト対象のRailsアプリケーションの隣のspecディレクトリにテストをパックするのではなく、自分のspecディレクトリ内にテストを記述します。 さらに、 Capybara DSL



使用するとCapybara DSL







もちろん、実際のRailsアプリケーションが必要であり、それに基づいてテストを実行しますが、最終的には、railsによって生成されたアプリケーションのファイルのほとんどを削除できます。 実際、Railsが必要とするファイルはconfig/database.yml



のみです-ActiveRecordを使用する必要がある場合のみ。



Combustionへようこそ。これは、標準的なRailsアプリケーションのすべてのデフォルトを備えた、最小限のエンジンテストアプリケーションライブラリです。



カスタマイズ可能


典型的なセットアップ/インストールは次のとおりです。

Capybara



与えられた典型的なspec_helper.rb



は次のとおりです。

 require 'rubygems' require 'bundler' Bundler.require :default, :development require 'capybara/rspec' Combustion.initialize! require 'rspec/rails' require 'capybara/rails' RSpec.configure do |config| config.use_transactional_fixtures = true end
      
      





すべてを機能させる


まず、Railsアプリケーション内でRailsエンジンを使用していることを確認する必要があります。 ジェネレーターは必要なフックを追加する必要がありましたが、これはこのために必要なだけです。 ルートを追加する必要がある場合は、 spec/internal/config/routes.rb



ます。 モデルが必要な場合は、それらをspec/internal/db/schema.rb



に追加してspec/internal/db/schema.rb



。 すべてがREADMEでもう少し詳しく説明されています



すべて、テストの作成を開始します! 以下に小さな例を示します。

 # spec/controllers/users_controller_spec.rb require 'spec_helper' describe UsersController do describe '#new' do it "runs successfully" do get :new response.should be_success end end end
      
      





または、統合テストにCapybara



を使用する:

 # spec/acceptance/visitors_can_sign_up_spec.rb require 'spec_helper' describe 'authentication process' do it 'allows a visitor to sign up' do visit '/' click_link 'Sign Up' fill_in 'Name', :with => 'Pat Allan' fill_in 'Email', :with => 'pat@no-spam-please.com' fill_in 'Password', :with => 'chunkybacon' click_button 'Sign Up' page.should have_content('Sign Out') end end
      
      





キーを回す


そうです、ここに私のお気に入りのヘルパーの1つがありますconfig.ru



ジェネレーターはconfig.ru



ファイルをエンジンに追加します。つまり、次のことを意味します。ブラウザーでテストアプリケーションを実行できます。 localhost:9292



localhost:9292







いくつかの予約


すでに述べたように、 Combustion



RSpec



Combustion



作成されましたが、 RSpec



パッチを喜んで受け入れます。 同じことがCucumber



にも当てはまり、理論上は動作するはずですが、私はテストしていません。



さらに、gemはRails 3.1用に作成されています-いくつかのパッチを適用した後、Rails 3.0で動作するはずですが、3.0までの何かで動作することを強く疑います。 ただし、自由に探索してください。



エンジンではないライブラリの統合テストにgemが役立つ可能性もあります。 これを確認したい場合は、プロセスがどのように進んでいるかをお尋ねします。



おわりに


さて、私たちがどこに連れて行かれたか見てみましょう。 同様のアイデアを思いついたのは私が初めてではありませんでした-Combustionの作業を終えた後、彼らは同じ機能を実行するKaminariのテストシェルを示しました(別のライブラリに入れられなかっただけです)。 他の誰かが同じことをしても驚くことはありませんが、似たようなものを探していると、テストまたは仕様ディレクトリ内のレールに完全なアプリケーションが付属している有名なライブラリにつまずきました。



Combustionがエンジンを装飾できると思われる場合は、試してみてください。バグを見つけて、gemがより広範なタスクで機能するという自信を付けてください。 パッチとレビューは明確に歓迎されます。



All Articles