2015-03-03 43 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