我有一個Rails應用程序的後臺工作,它會生成一個大的CSV文件並將其作爲附件發送給電子郵件。爲了管理電子郵件的大小,我在壓縮CSV之前先將它壓縮。這工作正常;我們開發了開信刀,我可以打開壓縮附件並讀取數據。我使用「rubyzip」寶石來做壓縮。解壓縮二進制電子郵件附件
這個技巧似乎在測試它。使用rspec,我可以驗證消息是否有附件,並且附件的類型是application/x-zip-encoded
,這是很好的。然而,我想要做的是解壓縮附件並驗證測試中的數據,這樣證明會比較困難。附件是Mail :: Part類型的對象。如果我撥打附件part
,我可以使用part.body.raw_source
,part.body.encoded
或part.decode_body
從中獲取數據。 (第一個和第三個是相同的。)part.body.encoding
告訴我身體是二元的。當我嘗試將數據提供給Zip :: InputStream對象(使用Zip::InputStream.open(part.body.raw_source)
或任何其他數據方法)時,我得到類似ArgumentError: string contains null byte
的東西。
如何打開此附件並在rspec中讀取其數據?我有一個預感,那就是我需要在這裏進行一個解碼步驟。
錯誤look a lot like this question,但這裏也沒有答案。
我可能會誤解,但它聽起來像你想驗證寶石是在做它應該做的。如果是這樣,你不應該這樣做。你不應該寫測試來覆蓋另一個人的圖書館。他們應該進行自己的測試,如果他們不測試,你可以爲項目提供測試,或者找到一個已經正確測試的庫。 – 2014-10-17 14:10:02
它看起來像,不是。我認爲我的目標更多的是驗證附加到電子郵件的數據是應該附加的,並且解決方案是解壓縮數據並檢查它;我陷入瞭解壓縮步驟。 – pjmorse 2014-10-17 14:17:16