Ruby 摩卡摩卡进行另一项测试
我一直在遵循指南,但遇到了一个我似乎无法解决的问题。对于WordsController的功能测试,我有以下代码:Ruby 摩卡摩卡进行另一项测试,ruby,functional-testing,ruby-mocha,Ruby,Functional Testing,Ruby Mocha,我一直在遵循指南,但遇到了一个我似乎无法解决的问题。对于WordsController的功能测试,我有以下代码: class WordsControllerTest < ActionController::TestCase test "should get learn" do get 'learn' assert_response :success end test "learn passes a random word&q
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
class Word < ActiveRecord::Base
def self.random
all = Word.find :all
all[rand(all.size)]
end
end
我尝试过改变测试的顺序以及其他许多事情,但是我一次又一次地收到相同的测试失败-已经调用了Word.random()
我正在运行Rails 3.0 beta 4和Mocha 0.9.8。我一直在苦苦寻找解决我问题的办法,但似乎找不到。我是Ruby/Rails新手,因此对Ruby/Rails语言和框架相当不熟悉
提前谢谢 您需要什么样的摩卡咖啡?你在用bundler吗?听起来有点像没有调用mocha拆卸挂钩?我也有同样的问题,模拟功能不是孤立于测试的,似乎是mocha的加载顺序有问题 我在让摩卡咖啡与Rails3合作时遇到了一些问题。我找到了一些关于stackoverflow的帖子,但直到在agoragames.com上找到一篇帖子,我才偶然发现了这个解决方案 基本上,在项目的GEM文件中,对摩卡咖啡的需求应该如下所示:
gem 'mocha', :require => false
然后在test/test\u helper.rb
中,为摩卡添加一个require行:
...
...
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'mocha'
class ActiveSupport::TestCase
...
...
我认为Gemfile中摩卡的require行意味着您需要已经将摩卡安装为gem,bundler不会为您处理它。摩卡需要最后加载。我也为这个问题挣扎了很多
#Gemfile
group :test
gem 'mocha', '~>0.9.8', :require => false
...
end
及
此外,似乎摩卡迪尔敦没有被rails31调用。已设置的模拟永远不会被删除。。。(这一额外的攻击修复了它)
这些解决方案本身并不适用于我,它们使用了Ruby 2.2.2、Rails 4.2.2、mocha 1.1.0、shoulda context 1.2.1、factory_girl_Rails 4.5.0和其他一些与测试相关的gems 它做了什么呢?也移动了我的
test\u helper.rb底部的这两行:
require 'mocha/setup'
require 'mocha/test_unit'
我还删除了要求的“测试/单元”
。看来,mocha/test\u unit
已经为我做了这件事。在测试之间是否应该调用拆卸?如果mocha
已正确加载,它将对测试框架进行猴子补丁,以调用Mocha::API#Mocha_verify
和Mocha::API#Mocha_teardown
,即不需要显式调用它们。我询问如何要求Mocha
的原因是为了确定加载的顺序是否正确,以便猴子补丁能够正常工作。如果在运行测试时将Mocha\u OPTIONS=debug
设置为环境变量,您将看到哪些测试框架正在被成功地修补。如果您仍然对此有问题,请告诉我调试输出是什么,并告诉我您使用的是什么版本的Mocha。谢谢,这正是我需要的。几个小时来我一直在用这个把头发扯得乱七八糟!谢谢!:)+1、迁移到bundler后,我将收到一份混乱的摩卡装单,我使用Sinatra,我应该将其包括在哪里?spec_helper.rb?但我仍然有这个问题。作为一个来自Java/Python的Ruby/Rails新手,我在最后一个小时里一直在为这个问题而挣扎——我不得不调试了一段时间,直到我了解到只有在调用模拟中的某个东西时才调用mocha的test verify(因为从最后开始的自动调用需要后期绑定),谢谢,谢谢!
test_helper.rb
....
#at the very bottom
require 'mocha'
class ActiveSupport::TestCase
def teardown
super
Mocha::Mockery.instance.teardown
Mocha::Mockery.reset_instance
end
end
require 'mocha/setup'
require 'mocha/test_unit'