2010-04-23 27 views
4

在我的控制器規範中,我是否有效?對於一些路由測試,(基於瑞安貝茨nifty_scaffold)如下: -有沒有辦法可以取消any_instance的Mocha樁?

it "create action should render new template when model is invalid" do 
    Company.any_instance.stubs(:valid?).returns(false) 
    post :create 
    response.should render_template(:new) 
end 

這是好的,當我在單獨測試控制器。在我的型號中我也有以下內容

it "is valid with valid attributes" do 
    @company.should be_valid 
end 

再一次,當單獨測試時,它可以正常工作。如果我爲模型和控制器運行spec,問題就來了。模型測試總是失敗,因爲有效?方法已被剔除。有沒有辦法讓我在控制器測試結束後刪除any_instance的殘根。

我已經通過以反向字母順序運行測試來確保模型測試在控制器之前運行,但我真的不喜歡我的測試依賴於序列。

回答

4

您需要手動配置RSpec。

Rspec.configure do |config| 
    ... 

    # == Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    # config.mock_with :rspec 
end 

另外,請記住,Rspec提供了自己的方法來模擬一個對象。使用RSpec API或者您將無法從圖書館抽象中受益。 http://rspec.info/documentation/mocks/message_expectations.html

+0

雖然解決方案是正確的,但解釋不是。摩卡沒有檢測到RSpec,但是當按照所述設置RSpec配置時,RSpec在適當的點調用摩卡。 – 2010-09-26 19:33:12

+0

更新了評論。謝謝@floehopper – 2010-09-26 22:02:24

1

貴spec_helper包含

Spec::Runner.configure do |config| 
    config.mock_with :mocha 
end 

隨着該rspec的應該拆掉測試之間的嘲弄。

3

我有同樣的問題,但沒有使用Rspec但正常Test::Unit,實際上ActionController::TestCase

定義的期望在測試中保持活躍。

是否有任何線索如何重置我的期望之間的測試?

  • 紅寶石:1.9.2
  • 的Rails:3.0.3
  • 摩卡:0.9.10

更新http://mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009

:我已經與 unstub摩卡方法解決了這個
相關問題