ndemoreau
ndemoreau

Reputation: 3869

invalid method when including module in Activesupport testcase

I created this module: support/mailer_macros.rb

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

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

I want to access it from my testhelper, so I did this in 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

But when I run my tests, I get the error:

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

What's wrong? Thanks!

Upvotes: 1

Views: 248

Answers (1)

Jon Cairns
Jon Cairns

Reputation: 11951

Including a module means that the module's methods are available as instance methods, not class methods. You're trying to run reset_email at the class level.

To fix this, extend MailerMacros instead of including it:

class ActiveSupport::TestCase

  extend MailerMacros
  reset_email

end

Upvotes: 2

Related Questions