【问题标题】:How to test that a view helper renders a partial?如何测试视图助手呈现部分?
【发布时间】:2014-11-18 11:09:09
【问题描述】:

假设我想根据控制器中的实例变量呈现不同的部分。我把逻辑放在一个辅助方法中,看起来像:

def display_my_partial(foo)
  foo == bar ? render(partial_x) : render(partial_y)
end

在我调用的视图中(使用 Slim):

= display_my_partial(@foo)

我的测试应该是什么样的?我试过类似的东西:

expect(display_my_partial(foo)).to render(partial: 'partial_x')

但是得到了:

NoMethodError:
       undefined method `matches?' for #<ActiveSupport::SafeBuffer:0x007ffb490aba80>

我的例子有点复杂,因为我的部分是在一个嵌套的命名空间中。我不得不对使用 render 'partial_x'render partial: 'namespace/model/partial_x' 进行一些试验,以使其符合规范,但最后我得到了上述错误。

那么你将如何测试呢?

【问题讨论】:

  • 为什么不测试部分内容而不是控制器助手?
  • 因为我不知道在帮助规范中测试视图是否是一个好习惯。

标签: ruby-on-rails partial view-helpers specs


【解决方案1】:

你在哪里测试它?确保调用了 render_views。

无论如何,您真的关心它呈现的部分吗?如果更改了文件名,或者您决定使用 html 帮助程序更改实现,该怎么办。这些对输出都不重要。我会亲自断言输出。根据输出的复杂程度,您可以在视图测试或简单的单元测试中进行。

HTH,

【讨论】:

  • 好吧,我正在 model_helpers_spec.rb 中对此进行测试,所以 render_views 将不起作用。就是这样 - 它在控制器的上下文之外,这就是为什么我很难确定如何测试它。
  • 我没有,我跳过了这个测试。
猜你喜欢
  • 2011-04-02
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多