我有一个帮手page_title_default
in ApplicationHelper
:
def page_title_default(options = {})
t '.title', options
end
现在我想像这样测试它:
describe '#page_title' do
subject { page_title }
it { ... }
end
end
这会导致以下错误:
Cannot use t(".title") shortcut because path is not available
根据这个帖子 https://stackoverflow.com/questions/21774156/testing-helper-in-rspec-with-i18n-lazy-lookup应该可以存根@virtual_path
像这样的变量:
helper.instance_variable_set(:@virtual_path, "admin.path.form")
但这似乎没有帮助:虽然我能够存根它,然后调用类似的东西helper.t '.something'
直接在测试中,它不适用于在page_title_default
方法(仍然有@virtual_path
set to nil
)。所以看起来这不是翻译助手的同一个实例。但我怎样才能找到page_title_default
方法一个?
怎么样:
RSpec.describe PageHelper, :type => :helper do
describe "#page_title_default" do
before do
allow(helper).to receive(:t).with(".title", {}) { "Hello!" }
end
subject { helper.page_title_default }
it { is_expected.to eq "Hello!" }
end
end
我们正在对此处返回的“翻译”字符串进行存根,以解耦规范helper
来自“真实”翻译,对于测试来说可能显得脆弱PageHelper
本身 - 每次更改“.title”的翻译时,测试都会失败。
另一方面 - 如果您更改使用的密钥,例如。从“.title”到“.default_title”它应该失败,因为它是行为的改变。
我认为显示的正确文本应该在不同级别的测试(具体来说是集成测试)上进行测试。请检查以下内容answer https://stackoverflow.com/questions/5415158/add-i18n-translations-to-rspec-tests/10671020#10671020.
希望有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)