Rspec と Shoulda - 補完的ですか、それとも代替ですか?
概要
私はしばらく Shoulda を使用しており、Rspec を読んで遊んでみました。詳細な比較対照は行っていません。しかし、この 2 つは重複する部分もありますが、1 対 1 の置き換えではないように私には思えます。
Shoulda で作成された既存のテストをすべて置き換えずに、Rspec を使用して Rails システムにいくつかの単体テストを作成することを検討しています。あくまで感覚を掴む方法として。
これは良いアイデアですか?徐々に一方から他方に移行することはできますか、それともトラブルを求めているのでしょうか?
考慮すべき、一方と他方の明確な利点はありますか?
解決策
それらは代替案であるというクリスの答えには反論しなければなりません。私は Rails アプリケーションで Shoulda と Rspec を一緒に使用していますが、これらは互いにうまく補完し合っています。
このコンボを使用すると、関連付けや検証などの繰り返しのための簡潔な 1 行の単体テストを作成できるほか、より複雑な仕様に対応する完全な rspec スイートを使用できるようになります。競合することなく、両方の長所を活用できます。
Rspec と一緒にインストールする方法を示した Shoulda README を確認してください。さらに、「共通の Rails 機能をテストする、Test::Unit および RSpec と互換性のあるワンライナーを提供します。そうでなければ、これらのテストははるかに長く、より複雑になり、エラーが発生しやすくなります。」とさえ述べています。
編集 (例):
私は常に仕様の先頭で、簡潔で読みやすいクラス関係と検証テストを宣言します。
describe Component do
context 'relationships' do
it { should belong_to(:technology)}
it { should have_many(:system_components) }
it { should have_and_belong_to_many(:variables) }
it { should have_many(:images).dependent(:destroy) }
it { should have_many(:documents).dependent(:destroy) }
end
context 'validations' do
it { should validate_presence_of(:make) }
it { should validate_presence_of(:model) }
it { should ensure_length_of(:name).is_at_most(100) }
it { should validate_presence_of(:technology_id) }
end
end
その後、仕様の残りの部分には、Rspec からのモックとスタブを使用する、より複雑なテストが含まれます。