Rspec如何存根在方法中创建的对象

时间:2015-01-15 20:43:08

标签: ruby-on-rails ruby rspec

我正在重构一个臃肿的控制器,为旋转木马提供多态模型。我正在尝试构建一个类方法来处理查找和返回可转载的项目。

在我的RSPEC测试中,我想要保留方法,'is_something?'在由于参数而被发现的场地。

  def self.find_carouselable(params)
    .......
    elsif params[:venue_id].present?
      venue=Venue.friendly.find(params[:venue_id])
      if venue.is_something? 
        do this 
      else
        do that
      end
    end
  end

我无法弄清楚如何存根由于输入数据而创建的对象 - 我不确定这是否称为存根或嘲弄?

  context "carouselable is a venue" do 
    before do 
      allow(the_venue).to receive(:is_something?).and_return(true)
    end

    it "returns the instance of the carouselable object" do 
      expect(CopperBoxCarouselItem.find_carouselable(venue_params)).to eq the_venue
    end
   end
非常感谢

2 个答案:

答案 0 :(得分:8)

你应该可以这样做:

allow_any_instance_of(Venue).to receive(:is_something?).and_return(true)

https://www.relishapp.com/rspec/rspec-mocks/v/2-14/docs/message-expectations/allow-a-message-on-any-instance-of-a-class

答案 1 :(得分:3)

你只需要将Venue位存根,就像这样

      before do 
        allow(Venue).to receive(:friendly).and_return(some_venues)
        allow(some_venues).to receive(:find).and_return(venue)
        allow(venue).to receive(:is_something?).and_return(true)
      end