我在page_title_default
中有一个帮助ApplicationHelper
:
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'
的内容,但它对于{中使用的翻译帮助程序不起作用{1}}方法(仍将page_title_default
设置为@virtual_path
)。所以它似乎与翻译助手的实例不同。但是我怎样才能找到nil
方法?
答案 0 :(得分:3)
如下:
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" to" .default_title"它应该失败,因为它是行为的改变。
我认为显示的正确文本应该在不同的测试级别上进行测试(集成测试,具体而言)。请检查以下answer。
希望有所帮助!