Во многом как этот вопрос я также использую nifty_scaffold Ryan Bates. Это имеет желательный аспект использования any_instance метода Мокко для принуждения "недопустимого" состояния в объектах модели, проложенных под землей позади контроллера.
В отличие от вопроса я связался с, я не использую RSpec, но Тест:: Единица. Это означает, что два RSpec-центральных решения там не будут работать на меня.
Есть ли генерал (т.е.: работы с Тестом:: Единица) способ удалить блокирующий any_instance? Я полагаю, что это вызывает ошибку в моих тестах, и я хотел бы проверить это.
Mocha не предоставляет такой возможности. Однако вы можете реализовать это самостоятельно.
Первое, что мы должны знать о мокко
, это то, что мокко
фактически заменяет оригинальные методы, когда вы их заглушаете. Поэтому, чтобы иметь возможность восстановить эти методы позже, вы должны сохранить ссылку на предыдущие. Это легко сделать с помощью: псевдонима new_method old_method
.
Это должно быть выполнено до насмешки над old_method
.
Теперь, чтобы разблокировать метод, вам нужно только псевдоним old_method new_method
.
Рассмотрим следующий код:
class A
def a
true
end
end
class TestA < Test::Unit::TestCase
def test_undo_mock
a = A.new
A.class_eval {alias unmocked_a a}
A.any_instance.stubs(:a).returns("b")
assert a.a, "b"
A.class_eval {alias a unmocked_a}
assert a.a, "a"
end
end