I'm using MiniTest 2.12.1 (the latest version of the stock testing framework shipped with Ruby >= 1.9) and I can't figure out how to mock a class method with it, the same way it's possible with the likes of Mocha, for example:
product = Product.new
Product.expects(:find).with(1).returns(product)
assert_equal product, Product.find(1)
I've been dabbling the Internet for days and I'm still to find a reasonable answer to this. Please help?
Minitest is a testing tool for Ruby that provides a complete suite of testing facilities. It also supports behaviour-driven development, mocking and benchmarking. With the release of Ruby 1.9, it was added to Ruby's standard library, which increased its popularity.
Minitest is the default testing suite used with Rails, so no further setup is required to get it to work.
Mocking is the practice of using fake objects to mimic the behaviour of real application components. Since mock objects simulate the behaviour of the original components, they can be used during testing of an isolated application code to handle its interaction with other parts of the application.
This might not be helpful to you if you're stuck using 2.12.1, but looks like they added method stubbing to minitest/mock in HEAD here.
So, were you to update to minitest HEAD, I think you could do this:
product = Product.new
Product.stub(:find, product) do
assert_equal product, Product.find(1)
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With