2011-06-27 28 views
3

私はajaxを使用してサブミットされたフォームを持っています。Rspecテストに失敗しました

これはすべて動作します。ここ

コントローラである:ここ

def create_bp 
    @user = User.new(params[:user]) 
    respond_to do |format| 
     if @user.save 
     flash[:success] = "Your friend's details have been saved." 
     #format.html { render :template => 'pages/home'} 
     format.js { render :action => "success" } 
     else 
     format.html { render :template => 'pages/home'} 
     format.js { render :action => "failure" } 
     end 
    end 
    end 

はuser_controller_spec試験である:ここ

it "should show the correct flash message" do 
      xhr :post, :create_bp, :user => @attr 
      flash[:success].should =~ /Your friend's details have been saved./i 
      end 

は、それが失敗した場合、試験によって与えられたメッセージである。

1) UsersController Ajax 'create_bp' success should show the correct flash message 
    Failure/Error: flash[:success].should =~ /Your friend's details have been saved./i 
     expected: /Your friend's details have been saved./i 
      got: nil (using =~) 
    # ./spec/controllers/user_controller_spec.rb:77:in `block (4 levels) in <top (required)>' 

The flash message is being created and I can see it on the page as well. 

はなぜ私はフラッシュを設定している場合はそれがないと言う[:成功]コントローラの右側に?

+0

'@user.save'がtrueを返していますか?たぶん妥当性検査が失敗しているかも –

+0

わかりませんが、コントローラをテストしているので、これはrender_viewsを追加したい状況ですか?参照:http://stackoverflow.com/questions/9027518/what-does-render-views-do-in-rspec別のオプションは、カピバラとキュウリIMHOでこのような高レベルの動作をテストすることです。 –

+0

メッセージを確認する前に保存が機能したかどうかを確認してください。これにより、あなたはより簡単に生きることができます。 – Fa11enAngel

答えて

0

flash.now [:success]代わりにflash [:success] JSの場合。

def create_bp 
    @user = User.new(params[:user]) 
    respond_to do |format| 
    if @user.save 
     flash.now[:success] = "Your friend's details have been saved." 
     format.js { render :action => "success" } 
    else 
     format.html { render :template => 'pages/home'} 
     format.js { render :action => "failure" } 
    end 
    end 
end 
関連する問題