gpt4 book ai didi

ruby-on-rails - 如何在 RSpec View Examples 中设置语言环境

转载 作者:数据小太阳 更新时间:2023-10-29 08:12:06 24 4
gpt4 key购买 nike

我想测试 View 以确保正确呈现错误消息。我的 config.default_locale'fr'。因此,我希望我的 View 能够从我的法语语言环境文件中找到正确的 Active Record 错误消息。

describe 'book/new.html.erb' do
let(:subject) { rendered }
before do
@book = Book.create #this generates errors on my model
render
end
it { should match 'some error message in French' }
end

此测试在单独运行或与其他规范/ View 一起运行时通过。但是当我运行完整的测试套件时, View 会呈现消息:translation missing: en.activerecord.errors.models.book.attributes.title.blank

我不明白为什么它使用 en 语言环境呈现。我试图强制语言环境:

before do
allow(I18n).to receive(:locale).and_return(:fr)
allow(I18n).to receive(:default_locale).and_return(:fr)
end

before do
default_url_options[:locale] = 'fr'
end

有没有人有想法?

最佳答案

这不会直接解决您的 View 规范问题,但我的建议可能会解决您的问题。

为了测试实际的错误消息,我不会使用 View 规范。相反,我会使用带有 shoulda-matchers 的模型规范测试 Book 必须有标题,并使用适当的错误消息:

describe Book do
it do
is_expected.to validate_presence_of(:title).
with_message I18n.t('activerecord.errors.models.book.attributes.title.blank')
end
end

为了测试在用户尝试创建没有标题的书籍时是否向用户显示错误消息,我将使用集成测试 Capybara看起来像这样:

feature 'Create a book' do
scenario 'without a title' do
visit new_book_path
fill_in 'title', with: ''
click_button 'Submit'

expect(page).
to have_content I18n.t('activerecord.errors.models.book.attributes.title.blank')
end
end

在测试中使用语言环境键的好处是,如果您更改了实际文本,您的测试仍然会通过。否则,如果您正在测试实际文本,则每次更改文本时都必须更新您的测试。

除此之外,在翻译丢失的情况下通过将以下行添加到 config/environments/test.rb 来引发错误也是一个好主意:

config.action_view.raise_on_missing_translations = true

请注意,上面的行需要 Rails 4.1 或更高版本。

如果你希望测试很多语言环境,你可以将这个助手添加到你的 RSpec 配置中,这样你就可以只使用 t('some.locale.key') 而不是总是输入 I18n.t:

RSpec.configure do |config|
config.include AbstractController::Translation
end

关于ruby-on-rails - 如何在 RSpec View Examples 中设置语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com