2012-04-20 5 views
1

No Rails仕様のパスでは、モデルが1つのみ、または最大で2つのみの例を見てきました。 深いレベルのネスティングを持つアプリケーションにどのように適用するのかと思います。したがって、たとえば、次のように回答モデルをテストするために、スタブ/モックオブジェクトを仕様を作成する方法は、No Rails Specへのパスで、深くネストされたモデルのテストに取り掛かる方法は?

Survey 
    has_many :questions 

Question 
    has_many :answers 

Answer 
    belongs_to :user 

User 
    has_many :surveys 
    has_many :answers 

、ネストされた例でありますか?

私の質問の要点は、ネストされたモデルの最も低いレベルをテストしている間、私は常に捕まえられるということです。

答えて

1

私の2セント(私が同じ目標に向かって取り組んできたとして):

  • は疫病のような法律デメテルの違反を避けてください。あなたのオブジェクトが別のオブジェクトの構造を掘り下げるほど、より多くのオブジェクトをスタブ/モックする必要があります。

  • OpenStructはあなたの友人です!

    1. は、必要なデータを返します。途中でオブジェクトのメソッドを書く:
    2. あなたが深くネストされたオブジェクトからデータを必要とするたび

      は二つのことを考えます。
    3. 関係私は本当に便利見つけたRailsのブックにAvdiグリムのオブジェクトから

つのパターンをラップするオブジェクトを作成します:

class YourObject 
    def make_related_object 
    related_object_maker.call 
    end 

    def related_object_maker=(maker) 
    @related_object_maker = maker 
    end 

    private 
    def related_object_maker 
    @related_object_maker ||= RelatedObject.public_method(:new) 
    end 
end 

これは置き換えることができますあなたのテストでラムダとの関係は非常に便利です。

EDIT

describe YourObject do 
    let(:maker) { lambda { "some value" } } 
    subject { YourObject.new } 

    before(:each) do 
    subject.related_object_maker = maker 
    end 

    its(:make_related_object) { should == "some value" } 
end 
+0

はああ、私は忘れてしまった...できるだけARモデルのうち、あなたのビジネスロジックの多くを引き出します。 – dogenpunk

+0

返事をありがとう。テストサンプルコードを投稿して、ラムダコールの作成方法を明確にすることはできますか? – Autodidact

関連する問題