0

私は合格する次のコントローラー仕様を持っています。create(:link)しかし、オブジェクトをモックまたはスタブに置き換えたいと思い ます。after_createcallbackを回避するにはどうすればよいですか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

たぶん、着陸オブジェクトもモックする必要があります。しかし、それを行う方法は?

4

1 に答える 1

0

しますか

let(:landing) do 
  mock(:landing, target_id: @link.id, destroy: true)
end

あなたの問題を解決しますか?

于 2012-10-08T13:35:03.287 に答える