【问题标题】:Testing if a function is called using Mocha测试是否使用 Mocha 调用函数
【发布时间】:2010-12-09 06:42:18
【问题描述】:

在我当前的 Rails 3 应用程序中,我正在进行一些单元测试,以确保仅在某些情况下才调用更新 S3。我不想在测试期间更新 S3,所以我使用 Mocha 来消除这种行为。有没有办法确保使用 mocha 调用函数?我已经查看了 Expectations,除非我做错了,否则我似乎必须这样做:

object.expects(:function_name).once

但是,这不会产生预期的结果:如果 function_name 被调用两次(这是预期的),这将标记一个错误,如果它只被调用一次(它应该),它不会标记一个错误,但是问题如果函数被调用零次,它是否不会标记错误。我需要一种方法来确保它被调用。似乎摩卡咖啡应该支持这一点,所以也许我做错了。任何帮助将不胜感激。

***** 更正:

事实证明我做得对,只是 mocha_verify 方法没有被自动调用。对于遇到类似问题的任何人,请在此处查看 Ole Morten Amundsen 的答案:Mocha Mock Carries To Another Test

【问题讨论】:

  • 您应该将答案标记为已接受。这样你就不会浪费好人的时间,那些浏览“未回答的 Q”以无私地帮助像你我这样的人的人。

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


【解决方案1】:

或者只是

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(=test-first)或 mocking 会很痛苦:)

一定要最后加载 mocha,所以它真的被加载了,就像我在这里的回答一样: Mocha Mock Carries To Another Test

【讨论】:

  • 在这里找到你的答案stackoverflow.com/questions/3118866/… 解决了我的问题。由于订购捆绑器对 mocha gem 进行了处理,因此未调用 mocha_verify 钩子。
  • 哇,这对我来说是第一次 :) 我只是喜欢 Mocha 并且想帮助其他人使用它。我已在此处将其他答案添加到我的答案中,因此您可以将其标记为已接受。很高兴我能帮上忙!
【解决方案2】:

试试:

object.expects(:function_name).at_least_once

查看文档:http://mocha.rubyforge.org/classes/Mocha/Expectation.html#M000042

【讨论】:

  • 我已经尝试过了,但事实证明我的问题是 mocha_verify 由于 mocha gem 的加载顺序而没有被调用。奇怪的豆子……
猜你喜欢
  • 2019-07-26
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
相关资源
最近更新 更多