RSpec - издевательство над классом

Я пытаюсь высмеять метод класса с помощью rspec:

Библиотека /db.rb

class Db
  def self.list(options)
    Db::Payload.list(options)
  end
end

Библиотека/дб/payload.rb

class Db::Payload
  def self.list(options={})
  end
end

В моем spec, я пытаюсь настроить ожидание Db:: Payload.list вызывается, когда я вызываю Db.list:

require 'db/payload'

describe Db do
  before(:each) do
    @options = {}
    Db::Payload.should_receive(:list).with(@options)
  end

  it 'should build the LIST payload' do
    Db.list(@options)
  end
end

Проблема в том, что я всегда получаю следующую ошибку:

undefined method `should_receive' for Db::Payload:Class

Любая помощь в понимании этой ошибки была бы наиболее оценена: -)

Ответы

Ответ 1

В вашем spec_helper.rb должно быть что-то вроде этого:

Spec::Runner.configure do |config|
  # == Mock Framework
  #
  # RSpec uses its own mocking framework by default. If you prefer to
  # use mocha, flexmock or RR, uncomment the appropriate line:
  #
  # config.mock_with :mocha
  # config.mock_with :flexmock
  # config.mock_with :rr
end

Аргумент по умолчанию config.mock_with :rspec, который позволяет использовать метод should_receive. Например, если вы используете Mocha, эквивалент expects, поэтому убедитесь, что вы используете правильную фальсификацию.