2011-09-13 6 views
6

私はFactoryGirlとRspecをテストに使用しています。 モデルは、nilの場合、initの後に外部キーを設定します。したがって、別の関連付けのデータを使用します。しかし、どうすればテストできますか? 通常、このオブジェクトの作成にはファクトリを使用し、「self.user.main_address.country_id」にはstub_chainを使用します。しかし、このオブジェクトの作成では、初期化後に呼び出されます。私はそれを突き詰める機会がない。レールモデルのafter_initializeコールバックをテストするには?

after_initialize do 
    if self.country_id.nil? 
    self.country_id = self.user.main_address.country_id || Country.first.id 
    end 
end 

答えて

8

実装の代わりに動作をテストするのが理想的です。メソッドが呼び出されることをテストする代わりに、外部キーが設定されることをテストします。

ここで、after_initializeコールバックをテストしたい場合は、その方法が有効です。

obj = Model.allocate 
obj.should_receive(:method_here) 
obj.send(:initialize) 

Allocateメモリ内のオブジェクトを置きますが、initializeを呼び出すことはありません。期待値を設定したら、initializeを呼び出してメソッド呼び出しをキャッチできます。

5

オーランドのメソッドが動作します。ここに追加したいものがあります。 (新しいrspec 'expect'構文を使用)

expect_any_instance_of(Model).to receive(:method_here) 
Model.new 
関連する問題