2014-02-25 17 views
1

所以我沒有很好的理由需要知道這一點,而不是好奇 - 最好的理由 - 但我不知道這裏發生了什麼。如何確定rspec控制器測試的主題?

背景:
我正在通過RSpec書籍和更新示例。

在第24章 - Rails控制器上,有一個消息控制器測試。

## spec/controllers/messages_controller_spec.rb ## 

require 'spec_helper' 

describe MessagesController do 
    describe "POST create" do 
    let(:message) { mock_model(Message).as_null_object } 

    before do 
     Message.stub(:new).and_return(message) 
    end 

    # Then a bunch of Tests... 

    context "when the message fails to save" do 
     before do 
     message.stub(:save).and_return(false) 
     post :create 
     end 

     it "assigns @message" do 
     assigns[:message].should eq(message) 
     end 

     it "renders the new template" do 
     response.should render_template("new") 
     end 
    end 
    end 
end 

這與消息控制器隨之而來:

## app/controllers/messages_controller.rb ## 

class MessagesController < ApplicationController 
    def create 
    @message = Message.new(params[:message]) 

    if @message.save 
     flash[:notice] = "The message was saved successfully" 
     redirect_to action: "index" 
    else 
     render "new" 
    end 
    end 
end 



當運行測試:

測試通過與響應

it "renders the new template" do 
    response.should render_template("new") 
end 

該測試也通過與受試者

it "renders the new template" do 
    subject.should render_template("new") 
end 

測試還與頁轉到

it "renders the new template" do 
    page.should render_template("new") 
end 

測試也與NOTHING

it "renders the new template" do 
should render_template("new") 
end 

通過在情況下,它可以幫助任何人做的這個正面或反面,則config/routes.rb剛剛有resources :messages

爲什麼所有這些測試都通過?我究竟在測試什麼?是「頁面」,「主題」還是「響應的同義詞」? 只要我的測試通過了,它是否重要?

回答

0

默認情況下,主題將引用類,它是MessagesController。

未在上一個測試示例中定義主題,將隱式設置主題爲MessagesController。

+0

這並沒有真正回答這個問題,但這主要是我的錯,因爲不清楚。什麼是迴應?這裏實際發生了什麼。響應只是一個附加到MessagesController類的對象嗎?對不起,要求澄清。我想接受答案,但我仍然不明白這裏發生了什麼。 –

+0

查看文檔http://guides.rubyonrails.org/v2.3.11/action_controller_overview.html#the-response-object,是MessagesController類的響應,在測試控制器中,如果你使用'it ... 「塊」將把主體定義爲階級本身,這在術語上應該等同於我相信的迴應對象 – jamesy829