【发布时间】:2019-08-04 12:04:24
【问题描述】:
Rails 控制器和视图提供了一个view_context(通常是一个ActionView::Base 对象),它为生成视图提供了上下文。
一种常见的模式是将模型实例包装在 Presenter 类中,在这种情况下,view_context 通常也作为参数传递,因此 Presenter 可以调用视图方法(例如 I8n.t()、Rails 路径助手等。 .) 根据需要。
在我的 RSpec 测试中,我使用模拟来测试 Presenter 中的 view_context 行为。对于路径助手,我必须单独模拟每条路径:
view_context = ActionView::Base.new
user = UserPresenter.new(FactoryBot.create(:user), view: view_context)
allow(view_context).to receive(:some_custom_path) do |opts|
some_custom_path(opts)
end
有没有一种简单的方法可以一次以编程方式模拟所有路径?
我想我可以遍历路径列表(不知道该怎么做)并逐个模拟,但感觉不是正确的方法。
谢谢!
编辑:实际上上面的 sn-p 甚至都不正确。它会引发错误,因为 view_context (ActionView::Base) 首先甚至没有实现 :some_custom_path。我猜这是一种防止存根不存在的东西的保护措施。
【问题讨论】:
标签: ruby-on-rails rspec rails-routing rspec3 presenter