-1
我用mail
,nokogiri
和reverse_markdown
寶石閱讀電子郵件和處理機構,剔除外部變量和一個Unicode零寬度字符(u200b
)來獲取變量@body
實例,它是指到一個字符串。下面是相關的代碼:instance_variable_get返回零當它是一個空字符串
ReverseMarkdown.convert
@body = email.html_part.decoded.delete("\u200b")
@body = Nokogiri::HTML.parse(@body).at("div")
@body.css("br").each { |node| node.replace('<br />') }
@body.css("div").each { |node| node.replace(node.inner_html)}
@body = @body.inner_html
@body = ReverseMarkdown.convert(@body)
if @body.gsub(/\s+/, "").length == 0
unless email.attachments.length > 0
raise StandardError, "Empty email"
end
end
puts @body.class # => "String"
後,空的電子郵件仍然是三個字符長,可能是由於從空白剔除標籤,還是因爲降價轉換器迫使它有兩個空格的空白。這就是爲什麼我做gsub
長度檢查去除空白。
當我跑我的RSpec測試:
context 'with no body' do
it 'outputs the body to markdown' do
puts instance_variable_get(:@body).class # => 'NilClass'
expect(instance_variable_get(:@body)).to eq("")
end
end
當電子郵件是空的,沒有附件,它表明:
expected: ""
got: nil
我無法想象,爲什麼之類的變量的變化。
如果我不在課堂上使用該方法怎麼辦?這是必需的嗎?當我嘗試這個時,我得到了:'未定義的局部變量或方法'email'' **注意**我應該指定,我第一次嘗試BDD,所以我只是想讓測試通過這裏。我不確定是否稍後會使用課程,因爲這是一個小小的程序,Mail很輕鬆地處理電子郵件課程。 –
在示例的上下文中,「email」將引用本地定義的變量。你需要用'let'來定義它,或者在例子中給它賦值。如果你的'describe'塊指定了你正在測試的類,你*可以*使用'subject'。 '描述MyClass'。你沒有顯示足夠的代碼讓我們知道這裏發生了什麼。 – zetetic