10

Rails のコントローラーとビュー内で使用できる gem をいくつか作成しています。gem を個別にテストできるようにしたいと考えています。しかし、gem 内に Rails のインスタンスを作成して、gem が Rails アプリ内で動作することをテストする方法を理解できませんでした。

私は RSpec を使用することを強く好みますが、おそらく Test::Unit ソリューションを適応させるか、Test::Unit を使用することもできます。

Rails プラグインの同様のソリューションにも興味があります。

(私はグーグルを試しましたが、「rails gem testing」は、gem のテスト方法ではなく、テストに使用される gem を示しています。このトピックに関する記事を 1 つまたは 2 つ見たことがあると確信しています。)

4

1 に答える 1

12

他のプラグイン (プラグインと宝石、同じもの) のテスト スイートを見てみましょう。

Active Record を拡張するプラグインのテストは非常に簡単です。Active Record はどこでも使用できるため、その場合は、Active Record をデータベース (インメモリ sqlite データベースなど) に接続し、コードをテストするだけです。

# test/test_helper.rb
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
require 'your_thing'

ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")

ActiveRecord::Schema.define(:version => 1) do
  create_table :posts do |t|
    t.string :title
    t.text :excerpt, :body
  end
end

class Post < ActiveRecord::Base
  validates_presence_of :title
end

# test/my_test.rb
require 'test_helper'

class MyTest < Test::Unit::TestCase
  def test_thing
    # use Post here
  end
end

コントローラーのアクションなどをテストしたい場合は難しくなります。私のライブ バリデーション プラグインには、多くのことを模擬して ERb ビューを文字列として渡すことができる、非常に広範なテスト スイートがあります。

これらの Test::Unit の例を RSpec に適応させることは、Test::Unit の何にも便乗しないので簡単です。

于 2009-04-07T08:04:36.977 に答える