Rails: огурец отправляет почту дважды - PullRequest
0 голосов
/ 26 августа 2011

Это должно быть легко отследить ... но для меня это не так:

У меня есть следующий сценарий огурца:

Scenario: Send mail
  Given I am a guest
  When I go to the new_contact page
  And I fill in "contact_name" with "Test User"
  And get mail count
  And I fill in "contact_email" with "test@example.com"
  And I fill in "contact_message" with "Test Message"
  And I fill in "contact_phone_num" with "123456789"
  And I press "Send Message"
  And get mail count

Все по умолчаниюшаги за исключением «get mail count», который просто возвращает:

puts ActionMailer::Base.deliveries.count

Первый шаг «get mail count» возвращает ноль, второй возвращает 2. Запуск ActionMailer :: Base.deliveries подтверждает, что электронная почтаидентичны (включая идентификатор объекта).Я не могу понять, откуда идет этот второй посыл.При фактическом использовании приложения почта приходит только один раз.Соответствующий код ниже:

Контроллер:

class ContactsController < ApplicationController

  def new
    @contact = Contact.new
    @pagetitle = "Contact Us"
    if (current_user) then
        @contact.name = "#{current_user.first_name} #{current_user.last_name}"
        @contact.email = current_user.email
    end
  end

  def create
    @contact = Contact.new(params[:contact])
      if @contact.save
        contactmailer = ContactMailer
        puts 'here now'
        contactmailer.contact_message(@contact).deliver
        redirect_to contact_thanks_url, notice: 'Contact was successfully created.'
      else
        render action: "new"
      end
  end

  def thanks

  end
end

Mailer:

class ContactMailer < ActionMailer::Base

  def contact_message(contact)
    @contact = contact
    mail(:to => ENV['MANAGER_EMAIL'], :from => @contact.email, :subject => t(:business_name), :content_type => 'text/plain')
  end

end

Файл конфигурации огурца:

BC::Application.configure do
  require 'ruby-debug'
  config.cache_classes = true
  config.use_transactional_fixtures = true

  config.serve_static_assets = true
  config.static_cache_control = "public, max-age=3600"

  config.whiny_nils = true

  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  config.action_dispatch.show_exceptions = false

  config.action_controller.allow_forgery_protection    = false

  config.action_mailer.delivery_method = :test

  config.active_support.deprecation = :stderr

  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.perform_deliveries = true

  ENV['MANAGER_EMAIL'] = 'test@example.com'

end

1 Ответ

1 голос
/ 26 августа 2011

Ответ, если у кого-то есть такая же проблема:

email_spec gem. Оператор 'require' в support / features / env.rb дважды вызывал почтовую программу. Почему я не уверен, но я удалил драгоценный камень, и все работало нормально.

...