我正在编写一个缺少翻译查找的测试——而且我是 RSpec 的初学者。换句话说,我正在编写一个规范,在视图中,所有可见文本都通过 translate 方法传递。
我指的不是缺少翻译,而是缺少翻译查找(源代码缺少对#t 或#translate 方法的调用)。
为此,我想存根 i18n 翻译方法 (I18n#t)。
为此,我如何找到 RSpec2 正在使用的视图实例?此视图实例包括模块 ActionView::Helpers::TranslationHelper。如果我可以访问该视图对象,我可以(我认为)存根它的翻译方法。顺便说一句,我想我应该从@controller 开始。
规范中的所有其他内容都以通常的方式工作(包括失败的测试),除了查找和存根视图的翻译帮助器方法#t。我正在使用渲染视图。
我尝试过(以各种方式)#helper、#translate 和#view。也许我错过了什么?
在 ObjectSpace 中(在我的测试中)使用方法#translate 搜索所有对象,我能够抓取该对象,因为它的类是 I18n::Backend::Simple。所以我的规范有效,但如果代码不必搜索 ObjectSpace 的话,它可能会快得多!
作为背景,到目前为止,最简单的测试计划似乎是在 RSpec 控制器测试中循环遍历每个控制器的操作,并寻找可见的字母字符。首先,将 Rails 翻译助手存根以返回空字符串。此外,还可以去除标签名称以及任何脚本和样式标签。
我的 Gemfile 包括 capybara 1.1.4、capybara-webkit 0.12.1、factory_girl 4.1.0、factory_girl_rails 4.1.0、rails 3.2.9、rspec 2.12.0、rspec-rails 2.12.0。