Вам необходимо использовать метод mocha yields .Также довольно интересно написать ожидание для метода backtick .Вы должны сделать ожидание, подобное этому:
expects("`")
Но на каком объекте?Вы можете подумать о Kernel или Object , но на самом деле это не работает.
В качестве примера приведем этот модуль:
module MyMethod
def self.mymethod
Dir.chdir('/tmp') do
`ls`
end
end
end
Я мог бы написать такой тест:
class MyMethodTest < Test::Unit::TestCase
def test_my_method
mock_block = mock
mock_directory_contents = mock
MyMethod.expects("`").with('ls').returns(mock_directory_contents)
Dir.expects(:chdir).yields(mock_block).returns(mock_directory_contents)
assert_equal mock_directory_contents, MyMethod.mymethod
end
end
Часть хитрости заключается в том, чтобы выяснить, к какому объекту ожидать метод backtick .Это зависит от контекста - независимо от того, self , когда этот метод вызывается.Здесь это модуль MyMethod , но в зависимости от того, где вы определяете mymethod , он будет другим.