2009-05-27 18 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

より@Controller使用してみてください。しかし、なぜか分からない。

before do 
... 
end 

が必要です。

+2

理由は前ということであるブロックは、システムの起動時に_once_を実行しているのに対し、前に()(実際には前にあります(:each))ブロックは、各テストの前に実行され、外部コンテキストで定義された_after_任意のbefore(:each)ブロックで発生します。 –

3

は削除ではなく、コントローラ

1

before(:all)ブロックにcontrollerが必要な場合は、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 
関連する問題