ruby-on-rails - Rspec 如何 stub 在方法中创建的对象

标签 ruby-on-rails ruby rspec

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

在我的 RSPEC 测试中,我想 stub 方法“is_something?”在根据参数找到的 field 上。

  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

我无法弄清楚如何 stub 作为输入数据的结果创建的对象 - 我不确定这是否称为 stub 或模拟?

  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

非常感谢

最佳答案

你应该能够做到:

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

关于ruby-on-rails - Rspec 如何 stub 在方法中创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972623/

相关文章:

rspec - 将 devise-async gem 与 RSpec 结合使用

ruby-on-rails - 如何在 Rails 的 haml 中编写数据分数属性?

ruby-on-rails - 订阅!干净的字符串,去掉撇号

ruby-on-rails - 如何使用 Ruby 快速计算字符串中子字符串的出现次数

css - 具有默认 HTML 按钮样式的 Rails link_to

ruby - 从 Golang post 获取 cookie

ruby-on-rails - ruby:异常后继续进行相同的循环迭代

ruby-on-rails - RSpec 讨厌名为 :public when stubbing object 的 Rails 作用域

mysql - 考虑在 Rails 上进行扩展,您会编写手写 SQL 吗?使用续集 gem ?

ruby - 在 RSpec 测试中模拟 ActiveRecord 关系行为