我正在编写一个缺少翻译查找的测试 - 我是RSpec的初学者。换句话说,我正在编写一个规范,在视图中,所有可见文本都通过translate方法传递。
我指的不是缺少翻译,而是缺少翻译查找(源代码缺少对#t或#translate方法的调用)。
要做到这一点,我想要存根i18n翻译方法(I18n #t)。
为了做到这一点,我如何找到RSpec2正在使用的视图实例?此视图实例包含模块ActionView :: Helpers :: TranslationHelper。如果我可以获得对该视图对象的访问权限,我可以(我认为)存根其翻译方法。顺便说一句,我想我应该从@controller开始。
规范中的其他所有内容都以通常的方式工作(包括失败的测试),除了查找和存根视图的翻译辅助方法#t。我正在使用render_views。
我尝试过(以各种方式)#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。
答案 0 :(得分:0)
即使在找到合适的物体之后,神秘的RSpec顽固(或者我认为)正在打破其他测试:
before(:each) { object.stub :translate, true }
after( :each) { object.unstub :translate }
相反,我成功使用了:
后来我得出结论,很可能Formtastic的i18n缓存已经破坏了其他测试。要解决此问题,正确的设置(在config / initializers / formtastic.rb中)为:
Formtastic::FormBuilder.i18n_cache_lookups = ! (Rails.env.development? || Rails.env.test?)
但我仍然没有找到视图实例。这就是我想知道的问题!所以,请给我答案,我会接受一个有效的。