-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