2011-12-14 305 views
0

我有一個測試失敗,我只是不知道如何讓它工作。 這是它在「POST創建」部分中的「應該有正確的標題」測試。 這是一個Rails 3.1的應用程序進行測試,我的繼承人寶石文件:Rails 3.1 Rspec測試在帖子失敗控制器「POST」創建'「

group :test do 
    gem 'turn', :require => false 
    gem 'minitest' 
    gem 'spork', '> 0.9.0.rc' 
    gem 'guard-spork' 
    gem 'guard-rspec' 
    gem 'webrat' 
    gem 'factory_girl_rails', '> 1.0' 
    gem 'mocha' 
    gem 'rspec-rails' 
end 

我的帖子控制器

class PostsController < ApplicationController 

    def new 
    @post = Post.new 
    @title = "Create a new post" 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @post } 
    end 
    end 

    def show 
    @post = Post.find(params[:id]) 
    @title = @post.title 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

    def create 
    @post = Post.new(params[:post]) 

    respond_to do |format| 
     if @post.save 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
     format.json { render json: @post, status: :created, location: @post } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     @title = "Create a new post" 
     end 
    end 
    end 

end 

Rspec的測試 - 我已經加入render_views到文件。

describe "POST 'create'" do 

    describe "SUCCESS" do 

     before(:each) do 
     @attr = { :title => "Foo", :content => "Bar" } 
     end 

     it "should create a new post" do 
     lambda do 
      post :create, :post => @attr 
      flash[:notice].should_not be_nil 
     end.should change(Post, :count).by(1) 
     end 

     it "should redirect to the post show page and show success message" do 
     post :create, :post => @attr 
     flash[:notice].should =~ /post was successfully created/i 
     response.should redirect_to post_path(assigns(:post)) 
     end 

     it "should have the right title" do 
     post :create, :post => @attr 
     response.should have_selector("title", :content => assigns(:post).title) 
     end 
    end 
end 

只有最後一次測試失敗。 錯誤消息:

Finished in 6.49 seconds 
11 examples, 1 failure 

Failed examples: 

rspec ./spec/controllers/posts_controller_spec.rb:62 # PostsController POST 'create' SUCCESS should have the right title 
Running: spec/controllers/posts_controller_spec.rb 
.......F... 

Failures: 

    1) PostsController POST 'create' SUCCESS should have the right title 
    Failure/Error: response.should have_selector("title", :content => assigns(:post).title) 
     expected following output to contain a <title>Foo</title> tag: 
     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
     <html><body>You are being <a href="http://test.host/posts/980190963">redirected</a>.</body></html> 
    # ./spec/controllers/posts_controller_spec.rb:64:in `block (4 levels) in <top (required)>' 

任何幫助,爲什麼失敗,將不勝感激。

回答

0

你願意的事情根本不會發生。

因爲你重定向的迴應是:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body>You are being <a href="http://test.host/posts/980190963">redirected</a>.</body></html> 

這將是更好地測試新的對象本身。

+0

謝謝。我只是意識到這一點:) – veritas1 2011-12-14 20:01:30