3

我正在运行一些 Cucumber/Capybara 测试。我一直在使用email_spec gem来检查电子邮件。一些步骤,“并且“someone@email.com”应该收到一封电子邮件”。当我使用 rack_test 驱动程序运行测试时,它们没有问题。但是,在使用 selenium 驱动程序时它们会失败:

And "someone@email.com" should receive an email                                                                
  expected: 1
       got: 0 (using ==) (RSpec::Expectations::ExpectationNotMetError)

你能帮助我吗?谢谢

4

1 回答 1

2

您必须将电子邮件放入文件中,因为默认情况下,测试环境中的 rails 将它们保存在无法从测试线程访问的静态变量中。如果您:file在黄瓜环境中使用 rails3 设置交付方法。如果您在 rails 2.x 上,请将其放入您的黄瓜初始化程序中:

ActionMailer::Base.class_eval do
  DELIVERIES_CACHE_PATH =
    File.join(RAILS_ROOT,'tmp','cache',"action_mailer_cache_deliveries {ENV['TEST_ENV_NUMBER']}.cache")

  def perform_delivery_cache(mail)
    deliveries = File.open(DELIVERIES_CACHE_PATH, 'r') do |f|
      Marshal.load(f)
    end

    deliveries << mail
    File.open(DELIVERIES_CACHE_PATH,'w') { |f| Marshal.dump(deliveries, f) }
  end

  def self.cached_deliveries
    File.open(DELIVERIES_CACHE_PATH,'r') { |f| Marshal.load(f) }
  end
end

config.action_mailer.delivery_method = :cache
于 2011-11-23T08:09:54.130 回答