代码之家  ›  专栏  ›  技术社区  ›  Craig Walker

有没有一种方法可以撤销Test::Unit中任何\u实例的Mocha存根

  •  23
  • Craig Walker  · 技术社区  · 16 年前

    很像 this question ,我也在用瑞安·贝茨的漂亮脚手架。它有使用摩卡咖啡的理想方面 any_instance 方法强制隐藏在控制器后面的模型对象处于“无效”状态。

    是否有一种通用的(即:与Test::Unit一起使用)方法来删除任何\u实例存根?我相信这会在我的测试中引起一个bug,我想验证一下。

    3 回复  |  直到 5 年前
        1
  •  46
  •   sameers    11 年前

    unstubbing on any_instance() .

    str = "Not Stubbed!"
    String.any_instance.stubs(:to_s).returns("Stubbed!")
    puts str.to_s   # "Stubbed!"
    String.any_instance.unstub(:to_s)
    puts str.to_s   # "Not Stubbed!"
    
        2
  •  4
  •   Yossi    16 年前

    摩卡不提供这样的功能。但是你可以自己实现。

    我们应该知道的第一件事 mocha 摩卡 alias new_method old_method . 必须这样做 之前 嘲笑 old_method .

    alias 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
    
        3
  •  0
  •   ChrisW    10 年前

    如果您想一次性删除所有存根/期望值,那么可以使用mocha\u teardown(例如,调用self.mocha\u teardown)。

    不过,在这种情况下可能有点破坏性。

    推荐文章