我们有Griddler模型测试工作正常。例如我们可以实例化lib / email_processor.rb并进行处理。 我们想要创建一个控制器测试,对标准/ email_processor进行端到端的发布。
问题是params没有通过帖子。我们的基本代码是:
@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对象是零。
我们已经尝试了
似乎无法正确处理。我们错过了什么?
答案 0 :(得分:1)
你的params似乎只适用于griddler。但是当你使用griddler-postmark时不正确。 Griddle Postmark适配器接受类似你答案的params,然后是griddler的griddler-postmark预处理参数。在rails app中传递传入电子邮件的params的正确格式如下所示: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
希望这会对你有所帮助:)。
答案 1 :(得分: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
}]}
希望它可以帮助某人