我一直在关注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的新手,所以对语言和框架不熟悉。
在此先感谢!
是否应该在测试之间调用拆解? – 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