rspec未定义的方法`mobile_device?'对于#<#

时间:2014-09-26 21:34:23

标签: ruby-on-rails methods rspec

我正在尝试在我的标题模板的一部分添加一个新类,如果在移动设备上查看该应用程序并且我从rake获得此错误(但它在localhost上完美运行):

失败/错误:渲染:template => “/layouts/_header.html.erb”      ::的ActionView ::模板错误:        未定义的方法`mobile_device?'对于#<#:0x007fbbddbd0b50>

这是我的标题模板中导致问题的一行:

./应用/视图/布局/ _header.html.erb

<div class="<%= 'flexslider-mobile' if mobile_device? && !current_page?('/') %>">
  <some html>
</div>

这就是我在测试中渲染模板时遇到的问题:

./规格/视图/布局/ application_spec

require 'spec_helper'

describe 'header' do

  before(:each) do
    render :template => "/layouts/_header.html.erb"
  end

./应用程序/控制器/ application_controller.rb

class ApplicationController < ActionController::Base

   protected

def mobile_device?
    if session[:mobile_param]
      session[:mobile_param] == "1"
    else
      request.user_agent =~ /Mobile|webOS/
    end
  end
  helper_method :mobile_device?
end

我是rails和rspec的新手,所以我确定这是显而易见的,我不知道......谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

必须在protected关键字上方声明helper_method调用。

答案 1 :(得分:0)

结果视图测试没有控制器上下文,所以我需要在渲染之前存根该方法:

  before(:each) do
    view.stub("mobile_device?" => false)
    render :template => "/layouts/_header.html.erb"   
  end

效果很好。感谢danpickett在stackoverflow之外的帮助!