当assert_select失败时,Ruby on rails会跳过其余的块

时间:2011-12-07 14:54:34

标签: ruby-on-rails testing block

我已经使用I18n模块为Rails应用程序实现了国际化支持,现在我正在测试这个实现。

我正在使用assert_select进行功能测试来断言没有带有类名“translation_missing”的span HTML元素,这样可以正常工作。

我还编写了一个帮助器方法来从config / locales目录中获取所有语言环境文件,这也很好。

我的问题是当我尝试遍历每个语言环境并检查没有丢失的翻译时。如果一个语言环境的测试失败,它将退出该块,报告失败,而我希望测试继续运行并在适用的情况下输出多个失败消息。这是测试:

test "index page no missing translations" do 

  # Login as admin to avoid 302 errors
  login_as(@user)

  # Get a list of the locales
  locales = get_locales()

  # Check each locale for missing translations
  locales.each do |locale|
  get :index, :locale => locale
  assert_select "span.translation_missing", false, "Broadcasts index page: Translations missing from #{locale}.yml"

  end
end

我有什么方法可以阻止该块被退出?

提前致谢。

1 个答案:

答案 0 :(得分:4)

您可能应该将其编程,例如像(未经测试的)

get_locales.each do |locale|
  test "index page translations #{locale}" do 
   # Login as admin to avoid 302 errors
   login_as(@user)
   get :index, :locale => locale
   assert_select "span.translation_missing", false, "Broadcasts index page: Translations missing from #{locale}.yml"
  end
end

这将导致创建多个测试,每个测试只测试一个区域设置,并且没有一个测试弄乱其他区域的结果。