2010-11-29 16 views
1

RSpec自分自身で... RSpec 2に関する完全なドキュメントはありませんか?少なくとも私が見つけることができたものはありませんでした...RSpec 2の生成仕様の理解

とにかく、私は、RSpecを統合するには微妙な試みの中で、Rails 3のスキャフォールドジェネレータで作成された29のスペックを調べて始めました。私を逃れる。誰かが助けてくれることを願っています(あるいは、まともなRSpec 2のドキュメントを教えてください)。

たとえば、以下の最初のコードブロック(def mock_clown..。)では、mock_clownがテスト用のClownクラスのモックを作成していると仮定できます。しかし、正確に何が起こっているのですか?この「モック」は何を生成していますか? .as_null_object.tapの意味は?私は中に私が遭遇したすべてのドキュメントやチュートリアルをこのブロックを比較する例を見つけることができないので、これは非常に混乱して...

#clowns_controller_spec.rb 

require 'spec_helper' 

describe ClownsController do 

    def mock_clown(stubs={}) 
    (@mock_clown ||= mock_model(Clown).as_null_object).tap do |clown| 
     clown.stub(stubs) unless stubs.empty? 
    end 
    end 

    describe "GET index" do 
    it "assigns all clowns as @clowns" do 
     Clown.stub(:all) { [mock_clown] } 
     get :index 
     assigns(:clowns).should eq([mock_clown]) 
    end 
    end 

... 


    describe "POST create" do 

... 


    describe "with invalid params" do 
     it "assigns a newly created but unsaved clown as @clown" do 
     Clown.stub(:new).with({'these' => 'params'}) { mock_clown(:save => false) } 
     post :create, :clown => {'these' => 'params'} 
     assigns(:clown).should be(mock_clown) 
     end 

     it "re-renders the 'new' template" do 
     Clown.stub(:new) { mock_clown(:save => false) } 
     post :create, :clown => {} 
     response.should render_template("new") 
     end 
    end 

... 

end 

答えて

4

RSpecのためのドキュメントの最高のソースは、おそらくそのgithubのですウィキすべての宝石への一般的なリンクは次のとおりです:https://github.com/rspec/rspec/wiki。また、rdoc、linked to hereをチェックアウトしてください。

特定の回答については、as_null_objectはモックを記録し、すべてのメソッド呼び出しを無視します。 (これは素晴らしいことですが、オブジェクト上のあらゆる単一のメソッドを気にする必要がないので気にするものだけです)

TapはRuby 1.9の機能です。ドキュメントat this linkから:

オブジェクト#タップ

はブロックにオブジェクトを渡し、(コールチェーンのために使用されることを意図し)、それを返します。

自分でRspec 2 WebratとCucumberを学習するには、the RSpec Book.素晴らしいリソースをチェックアウトすることをお勧めします。

関連する問題