19

この質問が少し主観的なものである場合は、お詫び申し上げます... Cucumber&Rspecを使用してRails3エンジンをテストするための最良の方法を見つけようとしています。エンジンをテストするには、rails3アプリが必要です。これが私が現在行っていることです:

  1. 次のコマンドを実行して、Railsテストアプリをgem(myengine)のルートに追加します。 rails new /myengine/rails_app

  2. /myengine/rails_app/features通常のRailsアプリの場合と同じように、キュウリをに追加します

  3. Rails Engine Gem(を使用:path=>"/myengine")を要求する/myengine/rails_app/Gemfile

  4. gemのルートディレクトリに仕様を追加します。/myengine/spec

  5. にフィクスチャを含め、/myengine/spec/fixturescucenv.rbに以下を追加します。

env.rb:

Fixtures.reset_cache
fixtures_folder = File.join(Rails.root, 'spec', 'fixtures')  
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }  
Fixtures.create_fixtures(fixtures_folder, fixtures)

このように設定することに問題がありますか?テストは正常に実行されますが、テストレールアプリ内に機能を配置することを少し躊躇しています。私はもともとgemのルートに機能を配置しようとし、その中にテストレールアプリを作成しましたfeatures/supportが、cucの実行時にアプリが他のすべてをロードしているのを確認できたとしても、何らかの理由でテストを実行したときにエンジンが初期化されませんでした。

Rails Enginesを使用していて、テストにcucとrspecを使用している人がいる場合は、セットアップについて聞いてみたいと思います。

* * UPDATE
この質問を書いたので、セットアップを少し変更しました。エンジンのルートの下にあるspecディレクトリを削除することにしました。ここで、「test_app」という名前のRailsアプリを作成し、Railsアプリで通常行うように、そのアプリ内にcucとrspecをセットアップします。次に、上記の手順3で行ったように宝石を含めます。エンジンはサブアプリなので、通常のレールアプリのようにテストするのが一番いいと思います。誰かが別の設定をしているのかどうか、私はまだ聞きたいです。

4

3 に答える 3

6

Rails 3.1は、エンジン用のかなり良い足場を生成します。RVMを使用して、edgeという新しいgemsetを作成し、それに切り替えることをお勧めします。

rvm gemset create edge
rvm use @edge

次に、エッジレールを取り付けます。

git clone git://github.com/rails/rails.git
cd rails
rake install

そこから、Piotr Sarnackiのマウント可能なアプリのチュートリアルに従って、次のような呼び出しを置き換えることができます。

bundle exec ./bin/rails plugin new ../blog --edge --mountable

簡単に:

rails plugin new blog --mountable --full

マウント可能オプションはアプリケーションをマウント可能にし、フルオプションはテストがすでに組み込まれているエンジンにします。エンジンをテストするために、このジェネレーターは、小さなRailsアプリケーションを含むがtest呼び出されたフォルダーを生成します。dummyこれがどのように読み込まれるかを確認できますtest/test_helper.rb

次に、データをマッサージして、機能するために必要なことを実行するのはあなた次第です。キュウリのファイルを標準からrails g cucumber:installプロジェクトにコピーして、機能するまでそれをいじることをお勧めします。私は以前にこれを行ったことがあるので、それが可能であることはわかっていますが、現在コードが見つかりません。

どうやって行くのか教えてください。

于 2011-01-21T21:21:21.323 に答える
2

次のgemを例として使用して、どのように実行したかを説明します:https ://github.com/skozlov/netzke-core

テストアプリケーション。にありnetzke-core/test/rails_appます。このアプリは独立して実行できるので、手動テストや、必要に応じて新機能の試用にも使用できます。

テストアプリがgem自体をロードするために、私は次のものを持っていますapplication.rb

$:.unshift File.expand_path('../../../../lib', __FILE__)
require 'netzke-core'

きゅうりの特徴。彼らはにいnetzke-core/featuresます。私env.rbが持っている:

require File.expand_path(File.dirname(__FILE__) + '/../../test/rails_app/config/environment')

...機能を実行する前にテストアプリケーションをロードします。

仕様。これらはにありnetzke-core/specます。私は以下spec_helper.rbを持っています:

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

...仕様を実行する前にテストアプリケーションをロードします。

テストの実行。この設定により、gemのルートからテストを実行できます。

cucumber features

rspec spec

ファクトリーガール。この特定の宝石ではありませんが、私は通常、フィクスチャの代わりにfactory_girlを使用しています(たとえば、https://github.com/skozlov/netzke-basepackの同様のセットアップを参照してください)。

于 2011-01-22T15:09:23.793 に答える
0

パーティーに少し遅れましたが、これが私の戦略です:

  1. 3.2でのrailsプラグインの生成:

    rails plugin new blog --mountable --full
    

    これによりtest/dummy、ダミーのRailsアプリを含むが作成されます

  2. 仕様を追加するspec

  3. ダミーフォルダをに移動しますspec(オプションで他のテストファイルを削除します)

  4. specs/spec_helper.rbそれが含まれるように適応する

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

    それ以外の

    require File.expand_path("../dummy/config/environment", __FILE__)
    
  5. 実行しrails g cucumber:installます。featuresフォルダaoを生成します

  6. 追加

    ENV["RAILS_ROOT"] ||= File.expand_path(File.dirname(__FILE__) + '/../../spec/dummy')
    

    require 'cucumber/rails'
    

    features/support/env.rb

これで、プロジェクトが作成さfeaturesspec、ルートに配置されました。ダミーのRailsアプリは、下にきちんと収納されています。spec/dummy

于 2014-01-06T20:20:59.770 に答える