Есть ли способ отменить Мокко, блокирующее из any_instance в Тесте:: Единица

Во многом как этот вопрос я также использую nifty_scaffold Ryan Bates. Это имеет желательный аспект использования any_instance метода Мокко для принуждения "недопустимого" состояния в объектах модели, проложенных под землей позади контроллера.

В отличие от вопроса я связался с, я не использую RSpec, но Тест:: Единица. Это означает, что два RSpec-центральных решения там не будут работать на меня.

Есть ли генерал (т.е.: работы с Тестом:: Единица) способ удалить блокирующий any_instance? Я полагаю, что это вызывает ошибку в моих тестах, и я хотел бы проверить это.

25
задан Community 23 May 2017 в 12:18
поделиться

1 ответ

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
4
ответ дан 28 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: