Я не понимаю, как я могу написать спецификацию, которая оцепила бы мою модель загрузчика несущей волны, чтобы я мог на самом деле проверить ее в спецификации почтовой программы
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