Можно ли удалить макетированные методы из объекта FlexMock в Ruby? - PullRequest
0 голосов
/ 17 января 2011

Учитывая фиктивный объект, я хочу повторно смоделировать метод несколько раз в течение срока службы объекта, например так:

mock = flexmock
[ :foo, :bar ].each do |val|
  mock.should_receive(:my_method).and_return val
  assert_equal val, mock.my_method, "my_method"
end

Однако запуск этого теста завершается неудачно для: bar

my_method.
<:bar> expected but was
<:foo>.

По сути, FlexMock не будет обновлять существующее ожидание.Любые идеи (кроме "использовать Mocha / другой насмешливый фреймворк)?

Ответы [ 2 ]

0 голосов
/ 18 января 2011

Это подразумевает взлом объекта FlexMock напрямую, но в конце концов это The Ruby Way!;)

  def clear_mocked_method(mock, method)
    mock.instance_eval { @expectations.delete method.to_sym }
  end
0 голосов
/ 17 января 2011

в Rspec Я бы использовал контексты, чтобы сделать это, и высмеивать это. Как я ожидал, это будет в серии тестов.(Тогда это будет иначе в следующем контексте для следующей серии)

Возможно, вам придется отказаться от некоторой компактности для некоторой корректности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...