You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Ruby on Rails控制器测试中如何调用控制器内定义的方法?

问题解决:NoMethodError调用AdController方法报错

错误原因很明确:pctrToAd是AdController的实例方法,而非类方法,你现在用类直接调用的方式(AdController.pctrToAd(...))不符合方法定义,所以触发了NoMethodError。

正确调用方式分两种情况:

  • 情况1:保留实例方法定义
    先创建AdController的实例对象,再通过实例调用方法:
# 先实例化AdController
ad_controller = AdController.new
# 通过实例调用pctrToAd方法
finalAds = ad_controller.pctrToAd(selectedAds: selectedAds, pctr: testCTR)

这种方式适用于pctrToAd方法需要依赖AdController实例内部状态(比如实例变量)的场景。

  • 情况2:将方法改为类方法
    如果pctrToAd不需要依赖实例状态,可以把它定义为类方法,这样你原来的调用方式就能正常工作。修改AdController的方法定义:
class AdController
  # 用self.前缀定义类方法
  def self.pctrToAd(selectedAds:, pctr:)
    # 原方法逻辑
  end
end

修改后,你之前的AdController.pctrToAd(...)调用就不会报错了。

内容的提问来源于stack exchange,提问作者itsmarziparzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:35:15