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をデフォルトにする方法はありますか?
私は問題なく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はテーブルを見ることができません。
私は同じ答えを探していましたが、 燃焼の宝石 *を見つけました。これは、より簡単な方法でエンジンを指定するための完全な環境をセットアップすることを約束します。追加するだけです
gem.add_development_dependency 'combustion', '~> 0.3.1'
あなたのgemspecに実行します
bundle exec combust
スペックディレクトリに完全なRailsアプリを再現します。
*まだ試していません...