Ruby on rails 如何打开摩卡咖啡?

Ruby on rails 如何打开摩卡咖啡?,ruby-on-rails,ruby-on-rails-3,tdd,mocking,mocha.js,Ruby On Rails,Ruby On Rails 3,Tdd,Mocking,Mocha.js,我有下面的摩卡咖啡,效果很好 在test.rb文件中: setup do Date.stubs(:today).returns(Date.new(2011, 7, 19)) Time.stubs(:now).returns(Time.new(2011,1,1,9,0)) end 问题是测试的时间安排被打破了。测试运行后,日期和时间对象仍会模拟。(!) 在-21949774.01594216秒内完成。 我补充说: teardown do Date.unstubs(:today)

我有下面的摩卡咖啡,效果很好

在test.rb文件中:

setup do
  Date.stubs(:today).returns(Date.new(2011, 7, 19)) 
  Time.stubs(:now).returns(Time.new(2011,1,1,9,0))
end
问题是测试的时间安排被打破了。测试运行后,日期和时间对象仍会模拟。(!)

在-21949774.01594216秒内完成。

我补充说:

teardown do
  Date.unstubs(:today)
  Time.unstubs(:now)
end
这会为每个测试抛出以下错误:
警告:已经有一个事务正在进行中

这是取消订阅的正确方式吗?在测试文件的末尾或者甚至在单元测试套件的末尾取消发布是否更好

在Rails 3.07和Mocha 0.9.12中工作


谢谢。

我不知道这是否完全是您的问题,但它只是
未发布
,而不是多元化


除此之外,不应该有任何问题。每次测试(或一组测试,如果一组测试需要存根)后,您肯定要取消存根,因为一旦存根,它将保持存根状态,这可能会破坏其他测试。

公认的答案是传播错误信息,应该认为是有害的

Mocha这样的模拟库的主要目的之一是提供自动模拟/存根拆卸,作为与各种测试库集成的一部分。事实上,如果你看一下,你会发现大量的维护工作都投入到了使Mocha能够与几个不同测试框架的所有版本顺利工作上

如果这不能正常工作,那么你需要弄清楚为什么摩卡的内置拆卸不能正常工作。在您自己的拆卸过程中手动解除润滑只会掩盖问题,并且可能会隐藏更微妙的问题,如存根泄漏或摩卡咖啡的其他不当行为


如果我不得不胡乱猜测的话,你的存根上会有钱,因为这是我在野外看到的最常见的导致这种事情的原因,但是问题中没有足够的信息来真正确定。

你不需要在测试之间取消存根。每次测试都是从头开始。“unsub”的用例是,如果你有一组测试作为设置的一部分存根,但是该组中的一些测试不需要存根其中的一部分。如果有什么不同的话,“unsub”,而不是“unsubs”,是复数形式:“it unsubs,they unsub”。我认为摩卡在这里选择的动词是不一致的。