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

Rspec to check title using controller stub

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

rspec-rails 3.0.0

rspec 3.0.0

ruby2.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 中也有 choose.html.erb 并且它有标题样本标题

我为上面的控制器写了一些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 的标题是否为 "sample text"。 我有两个问题

  1. 我尝试在第二个测试用例中为控制器编写一个存根, 即使我将 :page_title 更改为其他名称,测试用例也成功运行(它没有引用 BaseClass::SampleController 中的 page_title)为什么?

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

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

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

您可以阅读有关此方法的更多信息here