Rspec使用控制器存根检查标题

时间:2015-03-03 08:54:08

标签: ruby-on-rails rspec stub

我是rails和rspec的新手。 我正在使用

rspec-rails 3.0.0

rspec 3.0.0

ruby​​ 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

在config / locale / en.yml中,它的值是“sample title”

我也在app / view中选择了..html,它有标题样本标题

我为上面的控制器写了一些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更改为其他名称(它不引用:BaseClass :: SampleController中的page_title),测试用例也能成功运行,为什么?

  2. 如果不是存根,如何在规范中访问page_title进行检查?

1 个答案:

答案 0 :(得分:1)

如果你只是想检查标题,你真的不需要存根。试试这个:

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

您可以详细了解此方法here