2011-04-03 18 views
6

これは簡単なはずですが、動作させることができません。私はスタブする:スタブモデルの保存方法をRspec/Railsで

@alliance.save 

それが真を返すように。私は試しました:

Alliance.stub(:save).and_return(true) 

しかし、それは動作しません。何か案は ?

答えて

14

私が間違っていない場合、Alliance.stub(:save)Alliance.saveへの呼び出しに影響します。あなたは@alliance.stub(:save).and_return(true)が欲しいです。あなたは(名前が示すように)Allianceの任意のインスタンスに対してsave方法をスタブうAlliance.any_instance.stubs(:save).returns(true)ような何かを、行うことができるように

Mochaは、有用な方法any_instanceを持っています。あなたは、おそらくのようなものを探している

+0

うーん、私は実際に保存がインスタンスメソッドであるため、それは同じだと思います。どのような場合でも、私は実際に@allianceにアクセスすることはできません。なぜなら、標準の作成メソッドでは「@alliance = Alliance.new(params [:alliance])」のようなものですからです。私はポスト変数を渡すことができないので、保存のバリデーションをバイパスするだけです: ":post:create、:name => '何でも'" – Spyros

+0

作成されたインスタンス変数に対してメソッドをスタブしたいと言っていますコントローラーでもっと正確な応答を得るのに役立ちます。 ;) –

+0

しかし私はそれに言及します:) – Spyros

4

describe AllianceController do 
    let(:alliance) { mock_model(Alliance) } 

    describe "#<controller action>" do 
    before do 
     Alliance.stub :new => alliance 
    end 

    context "valid alliance" do 
     before do 
     alliance.stub :save => true 
     end 

     it "should ..." do 

     end 
    end 
    end 
end 

内側の文脈では、trueを返すようにスタブ保存方法を持っているアライアンスのモックで作業することができます。新しいRSpecの構文使用

+0

+1コメントのSpyrosPから詳細を取得した後、私はおそらくコントローラをテストするための最良の方法だと思います。 –

6

allow_any_instance_of(Alliance).to receive(:save).and_return(true) 
関連する問題