摩卡模拟进行另一个测试
我一直在关注15 TDD steps to create a Rails application指南 - 但遇到了一个问题,我似乎无法解决。对于WordsController的功能测试,我有以下代码:摩卡模拟进行另一个测试
class WordsControllerTest < ActionController::TestCase
test "should get learn" do
get 'learn'
assert_response :success
end
test "learn passes a random word" do
some_word = Word.new
Word.expects(:random).returns(some_word)
get 'learn'
assert_equal some_word, assigns('word')
end
end
在我有以下代码Word类:
class Word < ActiveRecord::Base
def self.random
all = Word.find :all
all[rand(all.size)]
end
end
当我运行测试,我遇到以下错误(缩短了简洁):
1) Failure: unexpected invocation: Word(...).random() satisfied expectations:
- expected exactly once, already invoked once: Word(...).random()
我试图改变改变与其他千头万绪沿测试的顺序,但一次次我不断地收到相同的工商业污水附加费t失败 - 即Word.random()已被调用。
我正在运行Rails 3.0 beta 4和Mocha 0.9.8。我已经搜寻了很长时间,很难找到解决方案,但我似乎无法找到它。我是Ruby/Rails的新手,所以对语言和框架不熟悉。
在此先感谢!
我有同样的问题,嘲笑的功能不是孤立的测试,它似乎是与摩卡的加载顺序问题。
我有一些问题让摩卡能够使用Rails3。我就发现了几个计算器的职位,而且在整个解决方案并没有绊倒,直到我发现了agoragames.com后
基本上,在你的项目的Gemfile中,需要摩卡应该是这样的:
gem 'mocha', :require => false
然后在test/test_helper.rb
,添加需要行摩卡:
...
...
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'mocha'
class ActiveSupport::TestCase
...
...
我认为需要在Gemfile中摩卡线意味着你需要已经安装摩卡作为宝石,捆绑不会照顾它适合你。
你是如何要求摩卡咖啡的?你在使用捆绑器吗?这听起来有点像摩卡拆解挂钩没有被调用?
摩卡需要最后加载。我也为这个问题苦苦挣扎。
#Gemfile
group :test
gem 'mocha', '~>0.9.8', :require => false
...
end
和
test_helper.rb
....
#at the very bottom
require 'mocha'
正是我所需要的...... – pushmatrix 2010-12-10 01:39:14
正是我所需要的。我用这个头发撕了几个小时!谢谢! :) – 2011-09-30 10:59:02
+1,随着移动到捆绑商i'v搞乱秩序的摩卡加载 – 2012-01-19 11:26:18
此外,似乎mocha_teardown没有被调用rails31。嘲笑那些设置没有拆除......(这个额外的方法修复它)
class ActiveSupport::TestCase
def teardown
super
Mocha::Mockery.instance.teardown
Mocha::Mockery.reset_instance
end
end
这些解决方案并没有为我工作,对自己,使用Ruby 2.2.2,Rails的4.2.2,摩卡1.1。 0,shoulda-context 1.2.1,factory_girl_rails 4.5.0和几个测试相关的gem。
什么做的是也这两条线在我的test_helper.rb
底部移动:
require 'mocha/setup'
require 'mocha/test_unit'
我也删除require 'test/unit'
。看起来mocha/test_unit
已经为我做了。
是否应该在测试之间调用拆解? – pushmatrix 2010-10-26 00:59:57
如果'Mocha'已经正确加载,它将有猴子修补测试框架来调用'Mocha :: API#mocha_verify'&'Mocha :: API#mocha_teardown',即你不需要显式地调用它们。我之所以询问'摩卡'是如何被要求的,是为了确定是否按照正确的顺序加载了东西,这样猴子补丁就能正常工作。 – 2010-10-28 10:55:41
如果您在运行测试时将'MOCHA_OPTIONS = debug'设置为环境变量,您将看到哪些测试框架已成功进行猴子修补。如果您仍然遇到问题,请告诉我调试输出是什么,并告诉我您正在使用的摩卡版本。谢谢。 – 2010-12-04 17:36:48