0

我有以下通过的控制器规范。但我想 create(:link)用模拟或存根替换对象。我怎样才能绕过after_create回调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 回答