2014-02-28 68 views
2

我試圖測試通過蝦寶石生成並附加到ActionMailer電子郵件的PDF文檔中的特定內容。我正在使用RSpec和Capybara進行測試。使用ActionMailer發送測試PDF內容

我已經成功地測試這樣 expect(ActionMailer::Base.deliveries[0].filename).to eq("my_file.pdf")

我認爲我已經讀的地方,我一定要考的PDF本身喜歡這個,但它不工作的文件名。 `預期(的ActionMailer :: Base.deliveries [0] .body.encoded)。爲了have_content(user.first_name)``

運行測試時,我得到以下錯誤:

Failure/Error: expect(ActionMailer::Base.deliveries[0].body.encoded).to have_content(user.first_name) 
     expected to find text "John" in "JVBERi0xLjQKJf////8KMSAwIG9iago8PCAvQ3JlYXRvciA8ZmVmZjAwNTAw MDcyMDA2MTAwNzcwMDZlPgovUHJvZHVjZXIgPGZlZmYwMDUwMDA3MjAwNjEw MDc3MDA2ZT4KPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cK L1BhZ2VzIDMgMCBSCj4+CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdl cwovQ291bnQgMQovS2lkcyBbNSAwIFJdCj4+CmVuZG9iago0IDAgb2JqCjw8 IC9MZW5ndGggMzE2NAo+PgpzdHJlYW0KcQpxCi9UcjEgZ3MKMjA2LjAwMCA2 NTYuMDAwIDIwMC4wMDAgMTAwLjAwMCByZQpTClEKCnEKNDAwLjAwMCAwIDAg NTAuMDAwIDEwNi4wMDAgNzA2LjAwMCBjbQovSTEgRG8KUQpxCi9UcjEgZ3MK MjA2LjAwMCA2NTYuMDAwIDIwMC4wMDAgMTAwLjAwMCByZQpTClEKCkJUCjIx OC40ODI1NTg1OTM3NSA2NDIuODk2IFRkCi9GMS4wIDE4IFRmCls8NTQ+IDEx MC44Mzk4NDM3NSA8NjU2OTZjNmU2MTY4NmQ2NTYyNjU3Mzc0OGE3NDY5Njc3 NTZlNjc+XSBUSgpFVAoKCkJUCjM2IDYyMy4zMjk5OTk5OTk5OTk5IFRkCkVU CgoKQlQKMzYgNjAzLjc2Mzk5OTk5OTk5OTkgVGQKRVQKCgpCVAoyNDguODUy 

本文持續很長時間。

也許這只是我,但這並不完全看起來「可測試」給我。有人知道這樣做嗎?謝謝!

+0

您正在嘗試在加密字符串中找到非加密字符串「John」。 Cypher「John」採用與字符串相同的過程,或者在您的測試環境中不處理您的電子郵件。 (通過密碼我的意思是編碼) – MrYoshiji

回答

3

首先,您的PDF生成代碼應該確實與您的郵件程序代碼是分開的,並且應該有自己的測試與郵件程序測試分開。請先這樣做。

將PDF生成代碼和測試分開後,您可以生成PDF並使用pdf-inspector寶石測試其內容,該寶石由製作蝦的相同人員幫助維護。然後在郵件測試中,您可以使用something like this簡單地檢查文件是否已附加。

P.S.電子郵件內容看起來亂碼(JVBERi0xLjQ...)的原因是電子郵件附件(通常是)編碼爲Base64。但即使你解碼了它,也可能無法在沒有庫的情況下搜索純文本字符串的PDF內容,因爲它可能被壓縮(我不知道Prawn默認是否這樣做)。但實際上,您的PDF代碼和測試以及您的電子郵件代碼和測試應該完全分開。

+0

真棒,謝謝!我不知道他們已經做出了測試寶石。他們應該在他們的文檔中提到這一點。 – Linus

+1

FWIW這是Google在[「ruby testing prawn output」(https://www.google.com/search?q=ruby+testing+prawn+output))上的第一個結果。不過,我同意他們應該在蝦的自述文件中提及它。附:關於PDF壓縮和附件編碼,我改變了我的答案。值得一看,也許。 –

+0

噢好吧,我做了類似的谷歌搜索,但沒有找到任何東西。感謝您的好解釋! – Linus

相關問題