2014-12-02 84 views
2

我想爲一個測試和其他測試存根類方法,我希望實際的方法被調用。我一直使用RSpec和摩卡,所以下面的行爲看起來很奇怪。Ruby MiniTest UnitTest Stubbing類方法僅用於一個測試

我想在我的一個測試中存根的類。

class MyClass 
    def self.foo(arg) 
    return "foo#{arg}" 
    end 
end 

測試,其中i嘗試末梢MyClass.foo

class XYZTest < Minitest::Test 
    def test_1 
    MyClass.expects(:foo).returns('abcd') 
    assert_equal MyClass.foo('123'), 'abcd' 
    end 

    def test_2 
    assert_equal MyClass.foo('123'), 'foo123' 
    end 
end 

第一測試通過,但第二個測試失敗,說明摩卡:: ExpectationError:意想不到調用:MyClass.foo( '123' )

在test_2中,我想調用實際的類方法,而不是我在test_1中做的存根。

PS:上面是一個條紋的例子。我不想每次都重置,我將類方法存根。

回答

2

Minitest存根方塊內的方法,所以你想要做的很簡單。

class XYZTest < Minitest::Test 
    # stubbed here 
    def test_1 
    MyClass.stub(:foo, 'abcd') do 
     assert_equal MyClass.foo('123'), 'abcd' 
    end 
    end 

    # not stubbed here 
    def test_2 
    assert_equal MyClass.foo('123'), 'foo123' 
    end 
end