RSpec和对象构造函数

时间:2014-03-13 00:39:53

标签: ruby-on-rails ruby rspec rspec-rails

我有一个单身课程,我们称之为NamesList

class NamesList
  include Singleton

  def initialize
    if names_cached?
      output_names
    else
      cache_names
    end 
  end

  ...

  private

  def cache_names
    Rails.cache.write('some_names_list', NamesClass.some_scope)
  end
end

在我的规范中,我想测试一下设置缓存时 - 让实例不会发出数据库连接。我的规格:

it "doesn't call database if cache is set" do
  Rails.cache.exist?('some_names_list', :whatever)
  expect(NamesClass).to receive(:some_scope)
  NamesList.instance
end

它不起作用。但是,如果我将initialize方法的内容移动到其他方法(例如,.some_method),那么当我执行NamesList.instance.some_method时 - 我的测试通过了。我该如何解决?

1 个答案:

答案 0 :(得分:0)

哦,对我而言!已找到解决方案: https://stackoverflow.com/a/14366444/1870446

应该只是ActiveRecord::Base.should_not_receive(:establish_connection)