Mocha Mock进行另一项测试

Mun*_*PhD 16 ruby functional-testing mocha.js

我一直在遵循15个TDD步骤来创建Rails应用程序指南 - 但是遇到了一个我似乎无法解决的问题.对于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
Run Code Online (Sandbox Code Playgroud)

在Word类中,我有以下代码:

class Word < ActiveRecord::Base
  def self.random
    all = Word.find :all
    all[rand(all.size)]
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我遇到以下错误(为简洁起见缩短):

1) Failure: unexpected invocation: Word(...).random() satisfied expectations:
- expected exactly once, already invoked once: Word(...).random()
Run Code Online (Sandbox Code Playgroud)

我已经尝试过更改测试顺序以及其他许多内容,但是我一次又一次地继续接收相同的测试失败 - 已经调用了Word.random().

我正在运行Rails 3.0 beta 4和Mocha 0.9.8.我一直在努力寻找解决问题的方法,但我似乎无法找到它.我是Ruby/Rails的新手,所以我对语言和框架并不熟悉.

提前致谢!

oma*_*oma 20

摩卡需要最后加载.我也在努力解决这个问题.

#Gemfile
  group :test
    gem 'mocha', '~>0.9.8', :require => false
    ...
  end
Run Code Online (Sandbox Code Playgroud)

test_helper.rb
  ....
  #at the very bottom
  require 'mocha'
Run Code Online (Sandbox Code Playgroud)


Dan*_*wer 7

我有同样的问题,模拟功能没有被隔离到测试,它似乎是摩卡的加载顺序的问题.

我有一些问题让Mocha与Rails3一起工作.我发现了一些stackoverflow帖子,但直到我在agoragames.com上发现帖子时才发现这个问题.

基本上,在项目的Gemfile中,Mocha的需求应如下所示:

gem 'mocha', :require => false
Run Code Online (Sandbox Code Playgroud)

然后test/test_helper.rb,为mocha添加一个需求行:

...
...
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'mocha'

class ActiveSupport::TestCase
...
...
Run Code Online (Sandbox Code Playgroud)

我认为Gemfile中mocha的需求行意味着你需要已经安装了mocha作为gem,bundler将不会为你处理它.