1

我们的 Griddler 模型测试工作正常。例如,我们可以实例化 lib/email_processor.rb 并对其进行处理。我们想要创建一个控制器测试,它对标准 /email_processor 进行端到端的发布。

问题是参数没有通过帖子。我们的基本代码是:

  @postattr= {to: "hello@hello.com", subject: "a subject", attachments: [
      ActionDispatch::Http::UploadedFile.new({
         filename: 'example_virgin_onetransaction.pdf',
         type: 'application/pdf',
         tempfile: File.new('testfiles/examplefile.pdf")})
  ]}
  post :create, @postattr
  expect(response).to be_success

它在发布到正确的路线并得到处理时工作,除了 email.attachments 对象为零。

我们试过了

  • @postattr.to_json # 在 UTF-8 中给出无效的字节序列
  • @postattr.to_s.to_json # 有效,但没有传递参数
  • uri 编码 json 字符串

似乎没有得到正确处理。我们错过了什么?

4

2 回答 2

1

您的参数似乎适合仅使用 griddler。但是当您使用 griddler-postmark 时不正确。Griddle Postmark 适配器接受像你的答案这样的参数,然后 griddler-postmark 为 griddler 预处理参数。在 rails 应用程序中为传入电子邮件传递参数的正确格式如下与 griddler-postmark

 attributes = {Subject: "a subject", TextBody: "Hello!",
            ToFull: [{Email: 'to_email@email.com', Name: 'to email'}],
            FromFull: {Email: "from_email@email.com", Name: "from email"},
            Attachments: [{Name: 'filename.pdf',
                           Content: Base64.encode64(fixture_file.read),
                           ContentType: 'application/pdf',
                           ContentLength: fixture_file.size
                          }]}

post :create, attributes

您可能会在处理带有附件的传入电子邮件时遇到问题。因此,我添加了一个示例 EmailProcessor 类,如下所示

class EmailProcessor

  def initialize(email)
      @email = email
  end

  def process
    if @email.attachments.present?
      attachment = @email.attachments.first
      file = File.new(attachment.original_filename, 'wb')
      file.write attachment.read
      file.flush
      attached_document = AttachedDocument.new(paper: file)
      attached_document.save!
    end
  end
end

希望这对你有帮助:)

于 2015-05-21T06:30:35.497 回答
0

是的,电子邮件参数的格式似乎不那么明显。往返地址实际上是列表。

  @post_attr = {Subject: "a subject", TextBody: "Hello!",
                ToFull: [{Email: 'to_email@email.com', Name: 'to email'}],
                FromFull: {Email: "from_email@email.com", Name: "from email"},
                Attachments: [{Name: 'filename.pdf',
                               Content: Base64.encode64(fixture_file.read),
                               ContentType: 'application/pdf',
                               ContentLength: fixture_file.size
                              }]}

希望它可以帮助某人

于 2015-05-19T22:25:08.200 回答