从帮助程序规范中获取'action_name'或'controller'

edt*_*hix 5 ruby bdd rspec ruby-on-rails

假设我在application_helper.rb中有以下代码:

def do_something
 if action_name == 'index'
   'do'
 else
   'dont'
 end
end
Run Code Online (Sandbox Code Playgroud)

如果在索引操作中调用,它将执行某些操作.

问:如何在application_helper_spec.rb中重写辅助规范以模拟来自'index'动作的调用?

describe 'when called from "index" action' do
  it 'should do' do
    helper.do_something.should == 'do' # will always return 'dont'
  end
end

describe 'when called from "other" action' do
  it 'should do' do
    helper.do_something.should == 'dont'
  end
end
Run Code Online (Sandbox Code Playgroud)

Rai*_*kis 7

您可以将action_name方法存根到您想要的任何值:

describe 'when called from "index" action' do
  before
    helper.stub!(:action_name).and_return('index')
  end
  it 'should do' do
    helper.do_something.should == 'do'
  end
end

describe 'when called from "other" action' do
  before
    helper.stub!(:action_name).and_return('other')
  end
  it 'should do' do
    helper.do_something.should == 'dont'
  end
end
Run Code Online (Sandbox Code Playgroud)