2010-12-28 11 views
0

せずに私はこのようなshoulda楽しく使ってきた「必要があります」:さshouldaを使用してブロック

class PostTest < Test::Unit::TestCase 
    should belong_to(:user) 
    should have_many(:tags).through(:taggings) 

    should validate_uniqueness_of(:title) 
    should validate_presence_of(:body).with_message(/wtf/) 
    should validate_presence_of(:title) 
    should validate_numericality_of(:user_id) 
end 

私にははっきりしていないもの:

context "test world" do 
    setup do 
    @world = ... 
    end 

    should "be spinning" do 
    assert_equal "spinning", @world.movement 
    end 

    ... and so on 
end 

私はこの変化を理解する上でヒントを必要とします様々な「所持すべき(:ユーザ)」 などが動作しています。言い換えれば、彼らがPostのインスタンス上で動作していることがかなり明確に表示されますが、 はそれを判断していますか? 「should xxx」行の主題は何ですか?

これは初心者の質問であることを知っていますので、どんなポインタでも大丈夫です!

答えて

2

shouldaは、特定の種類のテストをより簡潔にするために、ブロックの代わりに使用できる複数の1行のアサーションを定義します。これらはアクティブレコードモデルに関する特定のアサーションです。

これらのアサーションの件名がPostオブジェクトであることは間違いありません。これはテストクラスの名前から決定されます。あなたを介してそれをフォローしたい場合は、ソースを見てみましょう:

https://github.com/thoughtbot/shoulda/blob/master/lib/shoulda/context.rb

construct_subject方法は、テストのサフィックスを取り除き、そして得られたクラス名をインスタンス化します。優れたレスポンスのための

https://github.com/thoughtbot/shoulda/tree/master/lib/shoulda/active_record/matchers

+0

ありがとう:そして、あなたは、Active Recordのための具体的なシングルラインアサーション興味がある場合は、アクティブレコードのマッチャーを見てみましょう。非常に役立ちます。 – pitosalas

関連する問題