在RSpec

时间:2016-03-01 19:30:51

标签: ruby-on-rails ruby rspec views

让我说我的Rails初始化程序中有一个帮助方法,这使得它在我的应用程序中无处不在

# config/initializers/foo.rb
def foo
  "FOO"
end

然后我在渲染视图时使用它

<div class="container">
  <%= t("some.translation", link: foo) %>
</div>

我想在功能规范中隐藏该值(而不是查看规范)。这意味着我想拥有以下其中一项 -

expect_any_instance_of(<some class instance>).to receive(:foo) { "BAR" }
expect(<some class>).to receive(:foo) { "BAR" }
  1. 我需要填写的<some_class>或实例是什么?什么类充当视图方法的接收者?

  2. 一般情况下,我如何找到任意方法的收件人,以便以类似的方式将其删除?

2 个答案:

答案 0 :(得分:1)

来自docs

  

功能规范是用于执行功能切片的高级测试   通过申请。他们应该只通过外部驱动应用程序   界面,通常是网页。

这意味着你真的不应该在功能规范中存在任何内容。

答案 1 :(得分:0)

听起来你的foo方法特别是一个视图助手方法。如果是这种情况,那么该方法不属于初始化程序。初始化程序应该包含应该在应用程序启动时运行的代码(或用于猴子修补宝石的代码)。

有助于视图层的方法应列在app/helpers/application_helper(或同一目录中的新自定义文件)中。这就是帮助文件的用途 - 视图级方法。

那时,你要做的就是找出一个帮助方法。 This SO Question以及this one可以为您提供帮助。