迷你测试 - 在没有渲染的情况下测试应用程序控制器方法

mini test - testing an application controller method without render

我有一个非常简单的应用程序控制器方法要测试。其他应用程序控制器方法将使用它来确定我们是否需要重定向。所以它不会执行任何 render 功能。

class ApplicationController < ActionController::Base
  def has_consent
    current_user ? current_user.consent : nil
  end
end

迷你测试的所有示例都使用#assert_response#assert_redirected_to。如何在迷你测试框架内访问 application_controller 方法? IE,我可以写测试,但是我到底怎么设置它?

简单的答案是你不知道。

控制器的 public API 是响应 HTTP 请求的操作,您可以通过发送 HTTP 请求并编写有关返回响应的断言来测试它们。

如果您的方法不响应 HTTP 请求,则它应该是私有方法。 而且你不测试私人。

相反,您应该通过测试您的应用程序在用户未同意时如何响应来进行测试。不是实施细节。

如果单独测试方法真的很重要,那么它不属于控制器。而是在模型层或助手中 - 可以单独测试。