コードにさらに多くのテストを組み込もうとしていますが、壁にぶつかっています。
私のモデルは次のようになります
class Image < ActiveRecord:Base
before_create :do_something_general
before_update :do_something_on_update, :do_something_general
belongs_to :captureable, polymorphic: true
mount_uploader :image, SomeUploader
...
end
私のrspecは次のようになります
describe SomeModel do
before :each do
@image = FactoryGirl.create(:image)
end
...
describe "moving image" do
context "change the parent of the image" do
it "moves" do
new_parent = FactoryGirl.create(:parent)
current_file_path = @image.image.file.path
@image.captureable = new_parent
@image.save!
@image.image.file.path.should_not == current_file_path
end
end
end
end
Image を最初に作成すると、その親に依存するファイル ツリー構造に格納されます。親が変更されると、画像を移動する必要があり、これは before_update コールバック :do_something_on_update で行われます。私のテストでは、イメージの親が変更されたときに、イメージが新しい場所にあることを確認する必要があります。
問題は、@image.save.should be_valid
:do_something_on_update の前に :do_something_general が実行されるため、except が返される場合です (順序が重要です)。rspec は、私が新しいオブジェクトを作成していると考えているようです (デバッガーを使用して、変更時にオブジェクト ID が変更されないことを確認しました)。したがって、before_update の代わりに before_create を実行します。
編集: before_update は機能しているようですが、モジュールではなくクラス内にあるコールバック メソッドでのみ機能しています。この場合、:do_something_on_update はインクルード モジュールにあります。編集を終了
開発モードのコンソールでこれを試すと、期待どおりに動作します。
その他の注意事項: アップロードに Carrierwave を使用しています (画像列は Carrierwave アップローダーです)。:image ファクトリが呼び出されると、いくつかの親オブジェクトと祖父母オブジェクトも作成されます。Rspec 2.10、Rails 3.2.8、Ruby 1.9.3 を使用
あなたの応答を楽しみにしています。
ありがとう。