web-dev-qa-db-ja.com

テストRails 3.1Rspecを使用したマウント可能なエンジン

Rails 3.1エンジンを作り始めましたが、rspecを使ってテストするのに苦労しています。

まず、Rails g integration_test whateverを実行すると、spec/requestsの代わりにtests/Integrationで定期的な統合テストが作成されます(rspec-Rails gemがインストールされ、gemspecファイルの開発依存関係として必要になります)

また、スペックテストを実行すると、テストしているモデルに対応するテーブルが作成されていないというエラーが表示されます。ダミーアプリ内からrake engine_name:install:migrationsを実行してrake db:migrateを実行しようとすると、「テーブルは既に存在します」というエラーが表示されます。

すべてが切断されているように見えます。通常、完全なRailsアプリケーションで行うように、rspec gemをシームレスに機能させるために、ここに何かが欠けているように感じます。

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

Rails 3.1エンジンをテストするためにrspecをデフォルトにする方法はありますか?

37
deb

私は問題なくRailsエンジンでRSpecを使用しています。

次のスイッチを使用してプラグインを作成しました:-T --full --dummy-path = spec/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

発電機用。次のように、config.generatorsブロックをengine.rbファイルに追加します。

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

これで、モデルジェネレーターのようなジェネレーターを実行するときにrspecテストを取得することができます。

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

62
dwhite

私は同じ答えを探していましたが、 燃焼の宝石 *を見つけました。これは、より簡単な方法でエンジンを指定するための完全な環境をセットアップすることを約束します。追加するだけです

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

あなたのgemspecに実行します

bundle exec combust

スペックディレクトリに完全なRailsアプリを再現します。

*まだ試していません...

9
Fabio