2009-05-27 76 views
1

我正在使用rspec-rails,版本1.2.6。在控制器測試爲什麼在測試控制器時無法訪問RSpec中的控制器對象?

describe WebsController do ... 

我似乎沒有訪問控制器對象爲了存根方法。例如,以下將不起作用:

before :all do 
    @feed = mock_model(Feed) 
    controller.should_receive(:feed_from_params).and_return @feed  
    end 

我得到的警告一樣

An expectation of :feed_from_params was set on nil. 

,併發射了調試會話從規範只是方法模擬前告訴就行了,我得到的如下:

(rdb:1) self.respond_to? :controller 
true 
(rdb:1) controller 
nil 

從所有的例子,訪問控制器變量應該工作,但它不。是什麼賦予了?我怎樣才能在被測試的控制器中模擬或存根方法?

回答

2

刪除:所有的塊修復該問題之前。不知道爲什麼,但。

before do 
... 
end 

是你所需要的。

+2

這樣做的原因是,前(:所有)塊在系統啓動時運行_once_,而前()(這是一個真正的前(:each))塊在每次測試之前運行,並且在_after_之前發生(:each)在外部上下文中定義的塊。 – 2009-06-12 15:51:35

3

嘗試使用@Controller而非控制器

1

如果您需要controllerbefore(:all)區塊中,請致電setup_controller_request_and_response

0

PS:此行爲應該在最新版本的RSpec中修復。

從RSpec的v.2.14看到一個running example

require "spec_helper" 

RSpec.configure {|c| c.before { expect(controller).not_to be_nil }} 

describe WidgetsController do 
    describe "GET index" do 
    it "doesn't matter" do 
    end 
    end 
end