2015-03-03 45 views
0

我是rails和rspec的新手。 我使用Rspec使用控制器存根檢查標題

RSpec的護欄3.0.0

rspec的3.0.0

紅寶石2.3.5

我寫了一個樣本控制器

class BaseClass::SampleController < ApplicationController 
    skip_before_filter :check_privilege 
    def choose 
    @page_title = I18n.t('BaseClass.box.chooser_title') 
    render :layout => false 
end 
end 

其中

BaseClass.box.chooser_title 

在配置/區域/ en.yml,它的值是「樣本標題」

我也choose.html.erb在app /視圖,它有標題樣品標題

而且我寫了一些Rspec的對於上述控制器

context "choose" do 
it "renders the choose template" do 
    get :choose 
    expect(response).to render_template('choose') 
end 

it "page title should be Sample title " do 
    get :choose 
    BaseClass::SampleController.any_instance.stubs(:page_title).returns("Sample title") 
    obj = BaseClass::SampleController.new 
    expect(obj.page_title).to eql "Sample title" 
end 

我要檢查choose.html.erb的標題是「示例文本」與否。 我有兩個問題

  1. 我試着寫一個存根在第二次測試情況下,控制器, 測試案例成功運行,甚至當我改變:PAGE_TITLE一些其他的名字(這不是引用:PAGE_TITLE在BaseClass :: SampleController)爲什麼?

  2. 如果不是存根(stub),我該如何訪問spec中的page_title來檢查?

回答

1

如果你只是想檢查標題,你並不需要存根。試試這個:

it "page title should be Sample title " do 
    get :choose 
    expect(assigns(:page_title)).to eq "Sample title" 
end 

你可以閱讀更多有關此方法here

+0

謝謝你,它的工作。抱歉再添加一個問題。在這種情況下,如果我想訪問:page_title使用存根(stub),我應該怎麼做?我只是想知道這一點,因爲我根本無法理解存根的語法。提前致謝! – Rocky29 2015-03-03 09:35:56

+1

你並不真正使用存根來「訪問」東西,你使用它會改變某些方法返回的東西。它通常用於抽象當前測試中不想處理的應用程序的某些部分。另一方面,如果您使用「BaseClass :: SampleController.any_instance.stub」而不是「存根」來存根方法,我相信您的代碼可以工作,但我相信它仍然不是一個正確的方法。你也可能會發現這個問題很有趣http://stackoverflow.com/questions/16005281/rspec-how-to-assign-instance-variable-in-controller-spec – Dabrorius 2015-03-03 09:49:37

+0

Thanky you @Dabrorius – Rocky29 2015-03-03 09:51:34