37

と3.1マウントエンジン私はRailsの3.1エンジンを作り始めた、と私は苦労RSpecのを使用してテストを抱えています。テストRailsのRSpecの

まず第一に、私はrails g integration_test whateverを実行する場合、それはテスト/統合の代わりに、仕様/要求に通常の統合テストを作成します(RSpecのレールの宝石がgemspecファイル内の開発の依存関係としてインストールし、必要とする)

また、仕様テストを実行すると、テストしているモデルに対応するテーブルが作成されていないとエラーが表示されます。私はrake engine_name:install:migrationsを試して、ダミーのアプリケーションの中からrake db:migrateを実行して、 "テーブルは既に存在する"というエラーが出ます。

すべてがちょうど切断され、私はそれが通常のフルレールのアプリケーションと同じようにRSpecの宝石をシームレスに動作させるために、ここで何かが欠けてる感じらしいです。

私はここからhttp://rubyx.com/2011/03/01/start-your-enginesのすべての変更を踏襲し、http://railscasts.com/episodes/277-mountable-enginesのようにコンソールからダミーアプリを起動することで手動でエンジンをテストできます。

RSpecのにレール3.1エンジンをテストするためのデフォルトを作成する方法はありますか?

+0

レール3.2ではいくつかの問題が解決されましたが、テストデータベースを移行する方法は常に忘れています。テストデータベースでマイグレーションを実行するには、gemのディレクトリで 'rake app:db:test:prepare'を実行してください。 – Andrew

+0

この記事では問題なく問題を解決しました。 http://viget.com/extend/rails-engine-testing-with-rspec-capybara-and-factorygirl – jspooner

答えて

62

私は問題なしでRailsエンジンでRSpecを使用しています。 -T --full --dummyパス=スペック/ダミー:

は、私は次のスイッチを使用して、私のプラグインを作成しました。

  • -T除外テスト/ユニット
  • --fullプラグインがエンジンであることを示している
  • --dummy-path我々はテストディレクトリを取得しないように、単純である( デフォルトはテスト/ダミーです)。

そこから私は "あなたのエンジンを起動する" の記事からspec_helperを使用:発電機について

# Configure Rails Envinronment 
ENV["RAILS_ENV"] = "test" 
require File.expand_path("../dummy/config/environment.rb", __FILE__) 

require 'rspec/rails' 

ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../') 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f } 

RSpec.configure do |config| 
    config.use_transactional_fixtures = true 
end 

。それと

module MyEngine 
    class Engine < Rails::Engine 
    config.generators do |g| 
     g.test_framework :rspec, :view_specs => false 
    end 
    end 
end 

、私はモデルジェネレータなどのジェネレータを実行するときにRSpecのテストを取得することができるよ:私はconfig.generatorsはそうのような私のengine.rbファイルにブロックを追加します。 DB用として

は、あなたのdatabase.ymlファイルが正しく設定されているのですか?テスト環境を読み込みましたか? rake db:test:cloneまたはrake db:migrate RAILS_ENV=test?私の推測では、テストデータベースが設定されていないため、RSpecはあなたのテーブルを見ることができません。

+1

'--full'の代わりに' --mountable'を使うべきですか? – deb

+0

私はあなたの答えの変更に従ったが、私はまだジェネレータを使用することはできません。もし 'rails g integration_test posts'を試しても何も起こらない。多分あなたは何かを残したでしょうか? – deb

+0

私はintegration_testジェネレーターを使用していませんので、わかりません。 --fullを渡すだけで、名前空間以外の標準エンジンであり、ダミープロジェクトが生成されます。ダミープロジェクトを生成するために--fullを渡す必要があると確信していますが、RCから変更された可能性はありますか? レールモデルまたはコントローラーを使用するとどうなりますか? – dwhite

9

私は同じ答えを探していました。私はthe combustion gem *を見つけました。あなたのエンジンをより簡単に仕様化するための完全な環境をセットアップすることを約束しました。ちょうどあなたのgemspecに

gem.add_development_dependency 'combustion', '~> 0.3.1' 

を追加し、スペックディレクトリにフルレールアプリを再現する

bundle exec combust 

を実行します。私はまだ試していません*

...

+0

参照用の燃焼石に感謝します。 –

関連する問題