在我当前的 Rails 3 应用程序中,我正在做一些单元测试以确保仅在某些情况下调用更新 S3。我不想在测试期间更新 S3,所以我使用 Mocha 来消除这种行为。有没有办法确保使用 mocha 调用函数?我查看了 Expectations,除非我做错了,否则我必须这样做:
object.expects(:function_name).once
但是,这不会产生预期的结果:如果 function_name 被调用两次(这是需要的),这将标记一个错误,如果它只被调用一次(它应该),它不会标记一个错误,但是问题如果函数被调用零次,它是否不会标记错误。我需要一种方法来确保它被调用。看来 mocha 应该支持这个,所以也许我做错了。任何帮助将不胜感激。
***** 更正:
事实证明我做对了,只是没有自动调用 mocha_verify 方法。对于遇到类似问题的任何人,请在此处查看 Ole Morten Amundsen 的回答:Mocha Mock Carries To Another Test
最佳答案
或者只是
object.expects(:function_name).twice
或者,如果它有不同的输入,你应该测试它
resultmock = mock
object.expects(:function_name).with(someobject).returns(mock)
resultmock.expects(:something).returns(true)
object.expects(:function_name).with(resultmock)
不知道这是否有帮助,但它应该会给您一个良好的开端。仅供引用:“一次”是默认值。祝你好运,做 TDD(=测试优先)否则模拟会很痛苦:)
一定要最后加载 mocha,这样它才真正被加载,正如我在这里的回答: Mocha Mock Carries To Another Test
关于ruby-on-rails - 使用 Mocha 测试函数是否被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4395574/