所以我最近实现了一些代码,通过控制器将页面标题分配给我的应用程序中的页面。
在控制器中:
def index
@page_title = "My Awesome Index Page!"
end
在主要布局中:
<title><%= @page_title ? "#{@page_title} - Website Name" : "Website Name" %></title>
目标是给页面名称“My Awesome Index Page! - Website Name”,但是如果控制器中没有定义@page_title,它只是默认为“Website Name”
现在问题。这个应用程序有250页的订单。我想用某种自动方式来测试所有页面并确保我没有错过任何页面。理想情况下,我希望有一个自动测试可以访问每个页面,以便在添加未来页面时,如果未定义@page_title,测试将失败并提醒我新页面需要设置其page_title。
或者,至少有一个我可以运行的脚本,它会点击应用程序中的每个页面,然后返回页面标题列表等,这将是很棒的。这样我至少可以确保我得到了每一个。
答案 0 :(得分:0)
我对你的问题没有答案,但我采用了不同的方法。
通常最佳做法是一次测试一件事,并且必须重要。如果有一个页面标题对我来说很重要的话,我会为每个标题写一个测试,所以按照与Micheal Hartl相同的方法Rails Tutorial
我绝对没有为页面标题编写250个规格。但我从未有过要求。
答案 1 :(得分:0)
我的方法是使用I18n
,因此您可以在语言环境文件 /config/locales/titles.yml 中记录所有标题。它允许您将所有标题分组到一个文件中,从而轻松查看您正在执行的操作。它还具有保持控制器清洁的优点。
然后,要获取标题,您可以使用controller_name
和action_name
值从区域设置文件中检索文本。用辅助方法包装:
帮助方法
# This is pseudo code, I did not test it, it is only to demonstrate the approach
# But it should work :)
def html_title
title = I18n.translate! "#{controller_name}.#{action_name}"
content_tag :title, title
end
<强> titles.yml 强>
en:
users:
index: 'Here you go with the list of awesome users'
show: 'Showing an awesome user record'
解决方案1:
正如您所看到的,我将I18n.translate!
用于爆炸!如果在您的语言环境文件中找不到翻译,则会引发异常:您忘记定义的每个标题都会引发异常。
至于测试,我将使用capybara浏览所有页面并检查没有错误。
解决方案2:
如果您不想要例外,可以使用:default
这样的translate
选项:
def html_title
title = I18n.translate "#{controller_name}.#{action_name}", default: 'My awesome default title'
content_tag :title, title
end
请注意,我不再使用爆炸了。然后你的Capybara扫描你的所有页面并确保标题不严格等于'我真棒的默认标题'