私は合格する次のコントローラー仕様を持っています。create(:link)
しかし、オブジェクトをモックまたはスタブに置き換えたいと思い ます。after_create
callbackを回避するにはどうすればよいですかupdate_target
。
今、私がしようとするmock_model(Link)
とエラーが発生します:
undefined method `save!' for nil:NilClass
仕様が着陸オブジェクトを作成しようとしたとき。
describe LandingsController do
describe "#destroy" do
before(:each) do
controller.stub(:current_user).and_return(mock_model(User))
stub_request(:any, "www.example.com").to_return(status: 200)
@link = create(:link)
end
let(:landing) do
create(:landing, target_id: @link.id)
end
it "destroys the landing" do
Landing.should_receive(:find).with(landing.id.to_s).and_return(landing)
landing.should_receive(:destroy).and_return(true)
delete :destroy, id: landing.id, format: :json
end
it "returns 204" do
delete :destroy, id: landing.id, format: :json
response.status.should == 204
end
end
end
class Landing < ActiveRecord::Base
belongs_to :target, polymorphic: true
...
after_create :update_target
before_destroy :update_target
def update_target
self.target.save!
end
end
# landings_controller.rb
respond_to :json
def destroy
landing = Landing.find(params[:id])
target = landing.target
landing.destroy
target.save!
respond_with landing
end
たぶん、着陸オブジェクトもモックする必要があります。しかし、それを行う方法は?