Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RSpec&;Rails:Stub@virtual_路径,用于翻译助手测试应用程序助手_Ruby On Rails_Ruby_Rspec_Rails I18n - Fatal编程技术网

Ruby on rails RSpec&;Rails:Stub@virtual_路径,用于翻译助手测试应用程序助手

Ruby on rails RSpec&;Rails:Stub@virtual_路径,用于翻译助手测试应用程序助手,ruby-on-rails,ruby,rspec,rails-i18n,Ruby On Rails,Ruby,Rspec,Rails I18n,我在ApplicationHelper中有一个助手page\u title\u default: def page_title_default(options = {}) t '.title', options end 现在我想这样测试它: describe '#page_title' do subject { page_title } it { ... } end helper.instance_variable_set(:@virtual_path, "admin.path

我在
ApplicationHelper
中有一个助手
page\u title\u default

def page_title_default(options = {})
  t '.title', options
end
现在我想这样测试它:

describe '#page_title' do
  subject { page_title }

  it { ... }
end
helper.instance_variable_set(:@virtual_path, "admin.path.form")
结束

这将导致以下错误:

Cannot use t(".title") shortcut because path is not available
根据需要,应该可以如下方式存根
@virtual_path
变量:

describe '#page_title' do
  subject { page_title }

  it { ... }
end
helper.instance_variable_set(:@virtual_path, "admin.path.form")

但这似乎没有什么帮助:虽然我可以将其存根,然后在测试中直接调用类似于
helper.t.的东西,但对于
page\u title\u default
方法(仍然将
@virtual\u path
设置为
nil
)中使用的翻译助手,它不起作用。因此,它似乎与translation helper的实例不同。但是我怎样才能找到自己的
页面\u标题\u默认方法呢?

下面的例子怎么样:

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”翻译分离开来,这对于
PageHelper
本身的测试来说可能是脆弱的-每次更改“.title”的翻译时,测试都会失败

另一方面,如果您更改所使用的键,例如从“.title”更改为“.default\u title”,则会失败,因为这是行为的更改

我认为应该在不同的测试级别(具体来说是集成测试)上测试显示的正确文本。请检查以下内容


希望有帮助

这很有效,很好!但是为什么我需要调用显式
主题{helper.xxx}
?当只有
主题{xxx}
时,它不起作用。第二个代码中的隐式接收器是什么?为什么它和显式的不一样?嘿!这是一个有趣的问题!这是因为该方法将在测试的上下文中调用(在内部,它们是类),因此像这样的调用将导致类似于
未定义的局部变量或方法“page\u title\u default”
的错误,这是真的,因为该方法未在测试中实现。如果在
descripe
block-
def page\u title\u default中定义了该方法,则可以这样使用它;helper.page\u title\u默认结束
。请查一下我的其他电话号码。