我正在尝试在我的标题模板的一部分添加一个新类,如果在移动设备上查看该应用程序并且我从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的新手,所以我确定这是显而易见的,我不知道......谢谢你的帮助!
答案 0 :(得分:0)
必须在protected关键字上方声明helper_method调用。
答案 1 :(得分:0)
结果视图测试没有控制器上下文,所以我需要在渲染之前存根该方法:
before(:each) do
view.stub("mobile_device?" => false)
render :template => "/layouts/_header.html.erb"
end
效果很好。感谢danpickett在stackoverflow之外的帮助!