1

Я пишу тест на отсутствие поисков перевода, и я начинаю с RSpec. Другими словами, я пишу спецификацию, которая в представлении передает весь видимый текст через метод перевода.В тесте контроллера RSpec2 (с render_views), найдите экземпляр вида

Я ссылаюсь не на недостающие переводы, а на недостающие переводы (где в исходном коде отсутствует вызов метода #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 включает водосвинка 1.1.4, капибары-WebKit 0.12.1, factory_girl 4.1.0, factory_girl_rails 4.1.0, рельсы 3.2.9, RSpec 2.12.0, RSpec рельсы 2.12.0.

ответ

0

Даже после того, как найти правильный объект, таинственно гася RSpec (или так мне казалось) разрывалось другие испытания:

before(:each) { object.stub :translate, true } 
after(:each) { object.unstub :translate  } 

Вместо этого, я успешно использовал:

  • Alias_method_chain на I18n :: Backend :: Метод экземпляра Simple #translate и
  • Общая переменная Ruby для переключения #translate в пустую строку.

Позже я пришел к выводу, что, вероятно, было выполнено кэширование формы i18n от Formtastic, которое нарушало другие тесты. Чтобы исправить это, установив (в конфигурации/инициализаторов/formtastic.rb) право является:

Formtastic::FormBuilder.i18n_cache_lookups = ! (Rails.env.development? || Rails.env.test?) 

Я до сих пор не найден экземпляр вида, хотя. И это то, что я хочу знать, в вопросе! Поэтому, пожалуйста, дайте мне ответы, и я соглашусь с тем, что работает.

Смежные вопросы