【问题标题】:invalid method when including module in Activesupport testcase在 Activesupport 测试用例中包含模块时方法无效
【发布时间】:2013-11-02 22:28:37
【问题描述】:

我创建了这个模块:support/mailer_macros.rb

module MailerMacros
  def last_email
    ActionMailer::Base.deliveries.last
  end

  def reset_email
    ActionMailer::Base.deliveries = []
  end
end

我想从我的 testhelper 中访问它,所以我在 test/test_helper.rb 中做了这个:

ENV["RAILS_ENV"] = "test"
require File.expand_path("../../config/environment", __FILE__)
require "rails/test_help"
require "minitest/rails"
#require "capybara/rails"
require "minitest/rails/capybara"
require "support/mailer_macros"

class ActiveSupport::TestCase

  include MailerMacros
  reset_email

end

但是当我运行我的测试时,我得到了错误:

undefined local variable or method `reset_email' for ActiveSupport::TestCase:Class

怎么了?谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby include


    【解决方案1】:

    包含一个模块意味着该模块的方法可以作为instance 方法使用,而不是类方法。您正在尝试在班级级别运行 reset_email

    要解决这个问题,extend MailerMacros 而不是包含它:

    class ActiveSupport::TestCase
    
      extend MailerMacros
      reset_email
    
    end
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2016-02-23
      • 2013-04-27
      • 1970-01-01
      • 2012-05-10
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多