RSpec & Rails: Stub @virtual_path for translation helper to test an application helper
RSpec & Rails: Stub @virtual_path for translation helper to test an application helper
我在ApplicationHelper
有一个帮手page_title_default
:
def page_title_default(options = {})
t '.title', options
end
现在我想这样测试一下:
describe '#page_title' do
subject { page_title }
it { ... }
end
结束
这会导致以下错误:
Cannot use t(".title") shortcut because path is not available
根据 this post 应该可以像这样存根 @virtual_path
变量:
helper.instance_variable_set(:@virtual_path, "admin.path.form")
但这似乎没有帮助:虽然我能够存根然后在测试中直接调用 helper.t '.something'
之类的东西,但它不适用于在中使用的翻译助手page_title_default
方法(仍然将 @virtual_path
设置为 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
我们正在对此处返回的 "translated" 字符串进行存根,以将 helper
的规范与 "real" 翻译分离,这对于 [=12= 的测试来说可能显得脆弱] 本身 - 每次更改“.title”的翻译时测试都会失败。
另一方面 - 如果您更改使用的密钥,例如。从“.title”到“.default_title”它应该会失败,因为它是行为的改变。
我认为正确显示的文本应该在不同级别的测试(具体来说是集成测试)上进行测试。请检查以下 answer.
希望对您有所帮助!
我在ApplicationHelper
有一个帮手page_title_default
:
def page_title_default(options = {})
t '.title', options
end
现在我想这样测试一下:
describe '#page_title' do
subject { page_title }
it { ... }
end
结束
这会导致以下错误:
Cannot use t(".title") shortcut because path is not available
根据 this post 应该可以像这样存根 @virtual_path
变量:
helper.instance_variable_set(:@virtual_path, "admin.path.form")
但这似乎没有帮助:虽然我能够存根然后在测试中直接调用 helper.t '.something'
之类的东西,但它不适用于在中使用的翻译助手page_title_default
方法(仍然将 @virtual_path
设置为 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
我们正在对此处返回的 "translated" 字符串进行存根,以将 helper
的规范与 "real" 翻译分离,这对于 [=12= 的测试来说可能显得脆弱] 本身 - 每次更改“.title”的翻译时测试都会失败。
另一方面 - 如果您更改使用的密钥,例如。从“.title”到“.default_title”它应该会失败,因为它是行为的改变。
我认为正确显示的文本应该在不同级别的测试(具体来说是集成测试)上进行测试。请检查以下 answer.
希望对您有所帮助!