他のプラグイン(プラグインと宝石、同じもの)のテストスイートを見てください。
アクティブレコードを強化するプラグインのテストは簡単です。 use Active Record anywhereすることができます。その場合、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
コントローラのアクションなどをテストしたいときは難しくなります。 My live validations pluginにはかなりのテストスイートがあり、たくさんのことを模倣し、ERbビューを文字列として渡すことができます。
これらのTest :: Unitの例をRSpecに適合させるのは、Test :: Unitの何かにピギーバックしないので、簡単です。
これは非常に役に立ちました。ありがとう! ActiveRecordをロードして(毎回spec_serverまたはspork)ActiveRecordをロードし、毎回データベースを作成してもテストが遅くならないようにする方法はありますか? – Chinasaur
私はそれを行う方法があると確信しています。ライブバリデーションプラグインのようなメモリストレージではなく、sqlite3ファイルストレージを使用している場合は、.sqlite3データベースファイルが存在するかどうかをチェックし、そうでない場合はマイグレーションを実行しないでください。 –
これはかなりうまく機能しました。メモ:1)テストフレームワーク(rspec)とsqlite3を私のgemspec(そしてランタイム依存性としてのレール)に追加する必要がありました。2)テストヘルパーで 'rails'& 'active_record'を必要とする必要がありました。よく –