测试应用中所有页面的页面标题

时间:2014-02-22 06:45:36

标签: ruby-on-rails ruby

所以我最近实现了一些代码,通过控制器将页面标题分配给我的应用程序中的页面。

在控制器中:

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。

或者,至少有一个我可以运行的脚本,它会点击应用程序中的每个页面,然后返回页面标题列表等,这将是很棒的。这样我至少可以确保我得到了每一个。

2 个答案:

答案 0 :(得分:0)

我对你的问题没有答案,但我采用了不同的方法。

通常最佳做法是一次测试一件事,并且必须重要。如果有一个页面标题对我来说很重要的话,我会为每个标题写一个测试,所以按照与Micheal Hartl相同的方法Rails Tutorial

我绝对没有为页面标题编写250个规格。但我从未有过要求。

答案 1 :(得分:0)

我的方法是使用I18n,因此您可以在语言环境文件 /config/locales/titles.yml 中记录所有标题。它允许您将所有标题分组到一个文件中,从而轻松查看您正在执行的操作。它还具有保持控制器清洁的优点。

然后,要获取标题,您可以使用controller_nameaction_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扫描你的所有页面并确保标题不严格等于'我真棒的默认标题'