ruby-on-rails - 使用 Mocha 测试函数是否被调用

标签 ruby-on-rails testing ruby-on-rails-3 mocking mocha.js

在我当前的 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/

相关文章:

mysql - Rails group_by 总金额

ruby-on-rails - 未定义的方法 `transform_keys' 加载 Sidekiq 网站

javascript - 等待两个单独的 promise 解决,以便更新状态

perl - 如何制作/构建更大的 Selenium 测试套件?

ruby-on-rails - 当我没有任何供应商/插件时,Rails 弃用警告

ruby-on-rails-3 - css:如何使用每个循环(rails)在一行中显示两个产品

javascript - 根据下拉列表中的选择动态初始化未保存父对象的子记录

ruby-on-rails - 有效证书上的 Rails SSL 证书错误

unit-testing - 重申一下 Spock 的阻塞在哪里?

ruby-on-rails - 未定义的方法 `admin?' 为 nil :NilClass