Тестирование приложения почтовой программы от загрузчика носителя - PullRequest
0 голосов
/ 28 марта 2019

Я не понимаю, как я могу написать спецификацию, которая оцепила бы мою модель загрузчика несущей волны, чтобы я мог на самом деле проверить ее в спецификации почтовой программы

class Message
  mount_uploader :attachment, ::AttachmentUploader
end

class MessageMailer
  def new_message(message
    ...
    attachments[message.attachment.file.filename] = message.attachment.read
  end
end

Я пробовал несколько вещей, кажется, я не могу легкозамените мой mount_uploader на заглушку, используя Rspec allow, так что я прибег к фактической отправке туда реального файла, но тогда кажется, что в тестовом режиме carrierwave фактически не сохраняет файл, что приводит к

undefined method length' for <CarrierWave::SanitizedFile:0x007fc89c0095d0>

Это исходит от самоцвета почтовой программы:

0: /Users/Cyril/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mail-2.7.0/lib/mail/message.rb:2011:in `body_lazy'
 1: /Users/Cyril/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mail-2.7.0/lib/mail/message.rb:1245:in `body='
 2: /Users/Cyril/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mail-2.7.0/lib/mail/message.rb:2124:in `init_with_hash'
 3: /Users/Cyril/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mail-2.7.0/lib/mail/message.rb:135:in `initialize'
 4: /Users/Cyril/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mail-2.7.0/lib/mail/attachments_list.rb:83:in `new'
 5: /Users/Cyril/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/mail-2.7.0/lib/mail/attachments_list.rb:83:in `[]='
[next line is my mailer code that adds the attachment]

Буду признателен за любую помощь / рекомендации по тестированию почтовых программ с помощью carrierwave mount_uploader

shared_examples 'a mailer action that sends the message attachment' do
  before do
    attachment = File.new(file_fixture('avatar.png'))
    message.attachment = attachment
    message.save
  end

  it 'sends the message attachment' do
    expect(mail.attachments.first.present?).to be
  end
end
...