Я отделил свои тесты от переводов I18n с помощью специального сопоставителя (упрощенная версия:)
RSpec::Matchers.define :use_translation_key do |key|
match do |block|
mock_i18n(key) # I believe the implementation is not important here
block.call
verify_the_key_was_used(key)
end
def supports_block_expectations?
true
end
end
пример использования выглядит следующим образом
expect { some_model.decorate.title }.to use_translation_key('some_model.title')
И эта часть работает довольно хорошо,Но после того, как все мои спецификации выполнены, я хочу использовать все key
, используемые в этом сопоставителе, и проверить, действительно ли такие ключи определены, чтобы я мог видеть сообщение типа
Вы тестируете этотакие ключи используются, но не определены в переводах:
some_model.title
some_other.made_up.translation-key
и не пройдут тест.
Я знаю, что могу добавить такое утверждение к сопоставителю, но загружаю весь бэкэнд (и у меня есть два из них: Simple + ActiveRecord fallback), и это кажется действительно неэффективным.
Итак, моя проблема:
как правильно сохранить список ключей?Есть ли у RSpec что-нибудь для этого подготовленное?
match do | block |mock_i18n (ключ) # Я считаю, что реализация здесь не важна block.call verify_the_key_was_used (key) @@ keys_checked_in_the_matcher << key # ???end </p>
как мне их проверить?Я думаю, что могу определить такой хук:
config.after (: suite) do all_keys = load_all_translations_keys diff = @@ keys_checked_in_the_matcher - all_keys assert (diff) .to be_empty end
Но это не так.Что бы TheRightWay ™ сделал для этого?