Как заглушить метод в огурце? - PullRequest
3 голосов
/ 22 февраля 2012

Я хочу заглушить метод space_available_mb в SubmissionsController, чтобы он возвращал 5. Это не работает. Возвращает правильное пространство на реальном жестком диске.

если space_available_mb закомментирован, генерируется ошибка ожидания, что означает, что should_receive работает правильно. Тем не менее, он не возвращает 5, а действительное число, которое означает, что and_return по какой-то причине терпит неудачу.

Дальнейшая отладка показывает, что and_return действительно вызывается, но только после того, как метод запустился и вернул реальное число.

Scenario: Hard Disk Space is low on new submission
  Given I am on the new_submission page
  And hard disk space is low
  Then I should see "Low disk space!"

Given /^hard disk space is low$/ do
  SubmissionsController.should_receive(:space_available_mb).and_return(5)
end

class SubmissionsController < ApplicationController
  include FileManager

  def new
    space = space_available_mb
    ...
  end
end

module FileManager
  def space_available_mb
    ...
  end
end

1 Ответ

5 голосов
/ 23 февраля 2012

В зависимости от фиктивной структуры синтаксис может быть разным, но вы пытаетесь выполнить метод на любом экземпляре вашего контроллера.В RSpec у вас есть это .Итак, в соответствии с вашими попытками:

Given /^hard disk space is low$/ do
  SubmissionsController.any_instance.should_receive(:space_available_mb).and_return(5)
end

Если вы планируете использовать любые другие фиктивные фреймворки, обязательно найдется такой метод, как этот any_instance из RSpec.

...