2011-02-08 26 views
2

RSpec2のコントローラをテストしています。作成したアクションと更新アクションの両方に対して、無効なパラメータを渡したとき、それぞれ "編集"テンプレート。それはやっているが、私のテストは決して合格しない。この中Rspec2:無効なparamsが失敗した後にresponse.should render_template( "new")

describe "with invalid params" do 
    before(:each) do 
     User.stub(:new) { mock_user(:valid? => false, :save => false) } 
    end 

    it "re-renders the 'new' template" do 
     post :create, :company_id => mock_company.id 
     response.should render_template("new") 
    end 
    end 

結果:

re-renders the 'new' template 
expecting <"new"> but rendering with <""> 

ここでは、コントローラのアクションです:

respond_to do |format| 
    if @user.save 
    format.html { 
     flash[:notice] = "#{@user.full_name} was added to #{@company.name}." 
     redirect_to company_users_url(@company) 
    } 
    else 
    logger.debug @user.errors 
    format.html{ 
     render :new 
    } 
    end 
end 

また、この問題は、このコントローラに孤立しているようです。私は別のコントローラを実行しているほぼ同じコードを持っており、それは問題ありません。私は問題がどこにあるかわからない。

アップデート:ここで 2つのモックメソッド

def mock_user(stubs={}) 
    @mock_user ||= mock_model(User, stubs).as_null_object 
end 

def mock_company(stubs={}) 
    (@mock_company ||= mock_model(Company).as_null_object).tap do |company| 
    company.stub(stubs) unless stubs.empty? 
    end 
end 
+0

'mock_user'と' mock_company'の内容を投稿できますか? – zetetic

+0

まだ何かが欠けています。あなたはコントローラの '@ company'と' @ user'の値をどうやって設定しますか?コントローラは実際に 'User.new'を呼び出しますか? – zetetic

答えて

1

は、スタブとカンカンに問題があったが、されています。 CanCanはリソースを読み込んでいて、私が思っていたものとは異なるいくつかの方法を使用していました。

+2

あなたのソリューションは何でしたか? – NilsHaldenwang

+0

それは3月に戻ったので、答えを見つけるためにそれを掘る必要があります。また、CanCanはそれ以来多くの変更を行っていると確信しています。その場合でも、その答えはおそらく適切ではありません。 – ryanbillingsley

+0

CanCanを使用しているのとまったく同じエラーが表示されます。少なくとも私は私だけではないことを知っています –

関連する問題