2011-06-27 88 views
3

我有一個表單使用ajax submtted。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. 

爲什麼它說,如果我在控制器中設置flash [:success],它就沒有了?

+0

你確定'@ user.save'返回true嗎?也許驗證失敗。 –

+0

不確定,但是由於您正在測試您的控制器,這是您想要添加render_views的情況嗎?請參閱:http://stackoverflow.com/questions/9027518/what-does-render-views-do-in-rspec另一種選擇是測試這種更高級別的行爲與水豚和黃瓜恕我直言。 –

+0

在檢查消息之前檢查保存是否有效。這會讓你活得更輕鬆。 – Fa11enAngel

回答

0

嘗試使用flash.now [:成功]代替只是閃光[:成功]爲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