4

私はコントローラーのテストを処理しようとしていますが、これまでのところ、最も単純な問題で立ち往生しているようです。

ドキュメント.コントローラー:

    def edit
      @document = Document.find(params[:id])
    end

documents_controller_spec:

    describe 'GET #edit', focus: true do
      before(:each) { @doc = FactoryGirl.create(:document)}

      it "should assign @document to the document" do
        get :edit, id: @doc
        assigns(:document).should eq(@doc)
      end
    end

常に false を返します。@document には常に nil が割り当てられます。params[id] を @doc.id に指定しようとしましたが、何も解決しません。ここで何が間違っていますか?

4

2 に答える 2

5

rspec の観点から、行で比較している 2 つのドキュメント (@doc に割り当てられている) は次のとおりです。

assigns(:document).should eq(@doc)

同じではありません-データベース内で同じIDを持っていますが、比較している実際のルビーオブジェクトは異なります.1つは「before」ブロックで作成されたものであり、もう1つはおそらくGETリクエストが実行されたときにコントローラー内でインスタンス化されるためですあなたのテストで。

私の推測では、次のように動作します。

assigns(:document).id.should eq(@doc.id)
于 2013-02-06T09:21:17.247 に答える
1

変更してみてください

get :edit, id: @doc

get :edit, id: @doc.id

基本的には、ルートを構築するためにIDが必要です。

于 2013-02-06T05:58:54.167 に答える