0
다음과 같은 컨트롤러 사양이 있습니다. 그러나 create(:link)
객체를 모의 또는 스텁으로 대체하고 싶습니다. after_create
콜백 update_target
을 어떻게 해결할 수 있습니까?다형성 연관을 사용하여 객체를 모의하거나 스터핑하는 방법! 콜백에?
undefined method `save!' for nil:NilClass
하는 사양 착륙 개체를 만들려고 : 임 mock_model(Link)
할 때
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
어쩌면 나는 또한 착륙해야한다. 그러나 그것을하는 방법?
해당 사양에 대한 공장을 사용하여 (: 링크)를 만들고 싶지 않습니다. 당신의 대답은 저에게 오류를줍니다 :''모의 (Mock) : 예기치 않은 메시지를받은 태깅 :''실패한/오류 : Tagging.should_receive (: find) .with (tagging.id.to_s) .and_return (태깅)'' – tomekfranek
태깅 ??? 내 코드와 아무 관련이 없습니다! – rewritten