web-dev-qa-db-ja.com

Rails 3.1プラグインgem、ダミーテストアプリ、rspec

したがって、Rails 3.1には、あまり知られていない便利な「Rails g plugin new」ジェネレーターが付属しており、Rails gemプラグインに適したスケルトンを提供します。[http ://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]

これが行う便利なことの1つは、Test :: Unitでテストするために便利にセットアップすることです。これにより、テストを実行できる基本的なダミーRailsアプリが提供され、Railsのコピーでのみ機能する「エンジン」の動作をテストできます。 = app。(./ test/dummyに配置します)しかし、テストはまだmy_gem/testにあり、テストはダミーアプリに存在しません。my_gem/ test/test_helper.rbがあり、テストが実行されるように記述されています。 ../dummy/config/environmentで起動されたダミーアプリのコンテキストで実行されます。

多くの人がこの新しいジェネレーターについて知らないと思うので、これを説明します。これは、物事をとてもうまくセットアップします。

しかし、私の質問は、代わりにrspecでこれを行う方法を誰かが理解したかどうかです。私は同じ原則DIYに従って、Railsプラグインgemのrspecにこのようなものを設定しようとしましたが、さまざまな混乱する障害に直面しており、おそらく他の誰かがすでにそれを理解していることを望んでいますアウト(または私たちの残りのためにそれを理解することに興味があるでしょう、へー)。

40
jrochkind

テストユニットなしでプラグインを作成し、ダミーアプリケーションのパスを指定します。

Rails plugin new foobar --skip-test-unit --dummy-path=spec/dummy

Rspec-Railsを開発依存関係としてgemspecファイル(foobar.gemspec)に追加します。

Gem::Specification.new do |s|
  .
  .
  .
  s.add_development_dependency "rspec-Rails"
end

bundle installを実行します

ダミーアプリからプラグインスペックディレクトリへのシンボリックリンクを作成し、Rspecインストールジェネレーターを実行します。

cd spec/dummy
ln -s ../../spec
Rails generate rspec:install
cd -

次に、spec/spec_helper.rb(またはspec/Rails_helper.rb in Rails 4+、古いバージョンについては不明)を編集して、この行を変更します(3行目)。

require File.expand_path("../../config/environment", __FILE__)

これに:

require File.expand_path("../dummy/config/environment", __FILE__)

これで、プラグインのルートからRspecを実行でき、ダミーアプリケーションからもスペックを取得します。

bundle exec rspec spec

私はこれについてさらに詳しく書き、ダミーアプリケーションを使用してRailsプラグインでカピバラ、スポーク、ガードを設定する方法を示しました。

https://web.archive.org/web/20130125091106/http://namick.tumblr.com/post/17663752365/how-to-create-a-gemified-plugin-with-Rails-3- 2-rspec

94
nathan amick

Rails plugin new <gemname>を実行してから、rspecをdevelopment_dependencyとしてgemspecファイルに追加し、rspec --initをインストールします。

次に、ダミーのサブフォルダーをtestからspecに移動し、これらをspec_helperに追加します。

ENV["Rails_ENV"] = "test"

require File.expand_path("../dummy/config/environment.rb",  __FILE__)
require "Rails/test_help"
require '<gemname>'

Rails.backtrace_cleaner.remove_silencers!

test_helperにあるので!

21
Hassan