如何在测试期间将函数存根到助手中

时间:2011-05-08 11:24:55

标签: ruby-on-rails ruby-on-rails-3

看看这个辅助函数:

def show_welcome_banner?
  (controller_name == 'competition' && action_name == 'index') ||
  (controller_name == 'submissions' && action_name == 'show')
end

它需要定义controller_name和action_name函数。

我试图在我的RSpec匹配器中使用它:

describe PageHelper do
  it "should know when the welcome banner is to be shown" do
    helper.stub!(:controller_name).and_return('index')
    show_welcome_banner?.should == false
  end
end

但这不会真的奏效。

我怎样才能将帮助器中的函数存根?也许使用instance_eval? 谢谢!

修改下, 试图使用

controller.stub!(:controller_name).and_return('index')

但得到了

  1) PageHelper should know when the welcome banner is to be shown
     Failure/Error: show_welcome_banner?.should == false
     NameError:
       undefined local variable or method `controller_name' for #<RSpec::Core::ExampleGroup::Nested_1:0x1059a10b8>
     # ./app/helpers/page_helper.rb:16:in `show_welcome_banner?'
     # ./spec/helpers/page_helper_spec.rb:7

帮助器放在 spec / helper / page_helper_spec.rb ..

3 个答案:

答案 0 :(得分:4)

你试过吗

stub!(:controller_name).and_return('index')

似乎对我有用:)。

答案 1 :(得分:0)

你在Rspec中尝试过类似的东西吗?

controller.stub!(:controller_name).and_return('index')

帮助程序只是包含在ApplicationController中的模块。我相信该方法来自ActionController::Base

答案 2 :(得分:0)

rspec-rails 3.5

allow(helper).to receive(:controller_name) { 'submissions' }