FactoryGirlを使用した場合RSpecのテストが失敗します
-
27-09-2019 - |
質問
私は初めて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
所属していません StackOverflow