1

RSpecを自分で学ぼうとすると、噛み砕くことができる以上のことをしているのではないかと思います... RSpec 2に関する完全なドキュメントはないようです?!?少なくとも私が見つけることができたものはありません...

とにかく、私はRSpecを統合するための微妙な試みで、Rails3のスキャフォールドジェネレーターによって作成された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

1 に答える 1

4

rspecのドキュメントの最良のソースは、おそらくそのgithubwikiです。すべてのgemへの一般的なリンクは次のとおりです:https ://github.com/rspec/rspec/wiki 。また、ここにリンクされているrdocをチェックアウトしてください。

具体的な回答については、as_null_objectを使用すると、モックはすべてのメソッド呼び出しを記録して無視します。(これは素晴らしいことです。オブジェクトのすべてのメソッドを指定する必要はなく、気になるメソッドだけを指定する必要があるからです。)

TapはRuby1.9の機能です。このリンクのドキュメントから:

Object#tap

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

Rspec 2 WebratとCucumberを自分で学ぶには、RSpecBookをチェックすることを強くお勧めします。素晴らしいリソースであり、すべての側面をカバーしています。

于 2010-11-29T20:58:03.360 に答える