質問

私は初めてFactoryGirlで働いていると、次のコントローラのコードのために私のテストを設定している。


# PUT method
 def chosen    
    answer = Answer.find(params[:id])    
    if answer.update_attributes({:selected => true})
      respond_to do |format|
        format.html {
          flash[:notice] = "Success"
          redirect_to question_url(answer.question)
        }

        format.js { render :text => "Success" }
      end     
    end
  end

私のスペックは方法が選択(選択:ブール値)の値を更新していることを確認するテストでは、真の答えのために起因します。


require 'spec_helper'

describe AnswersController do
  integrate_views
  before(:each) do        
    @user = Factory.create(:user, :id => 1)
    @answer = Factory.create(:answer, :id => 1)
    @question = Factory.create(:question, :id => 1)
    User.stub!(:find).and_return(@user)
    @answer.stub!(:question).and_return(@question)
  end

  it "should use AnswersController" do
    controller.should be_an_instance_of(AnswersController)
  end

  describe "GET '/chosen'" do
    describe "mark as chosen when no answer is chosen" do            

      it "should mark a given answer as chosen" do
        #@answer.should_receive(:update_attributes!).and_return(true)
        put :chosen, :id => @answer.id
        @answer.should be_selected
      end


    end    
  end
end

私は何を見つけることは、私はそれをテストすることができます前に、私の変更はロールバックされますです。私は何を意味すると呼び出されるんupdate_attributesであり、それは真のselect属性の値を更新しますが、私のテストでは、それはanswer.selectedフィールドが更新されていないと言います。

いくつかの助けを好きになるでしょう?

役に立ちましたか?

解決

put後の仕様でこれを追加してみてください。

@answer.reload

これは、データベースの列の現在の値を取り出し、@answerの属性を更新します。あなたが行を保存して置くことができるので、それは、同様のオブジェクトを返します:

@answer.reload.should be_selected
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top