我在application_helper.rb
中有一个标记帮助器,如下所示。
你会如何为这样的事情编写测试?另外,这是从markdown生成简单HTML的最佳方法吗?
谢谢!
def markdown(text)
Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true).render(text).html_safe
end
答案 0 :(得分:1)
有两种选择:
记录Redcarpet::Markdown
,并期望它应该收到什么:
expect(Redcarpet::Markdown).to receive(:new).with(...) # `with` args omitted for brevity
markdown(text)
这里的问题是方法和测试之间的耦合非常高。在不破坏测试的情况下重构该方法是非常困难的,即使该方法实际上是相同的。
直接断言输出文本的正确性:
expect(markdown(text)).to eq 'This is markdownified'
这允许你更好地重构,但它看起来更像是集成测试,而不是单元测试,并且几乎测试Redcarpet比你自己的方法更多。单元测试通常应该假设他们调用的外部方法正常工作。
这是测试对我来说多余的情况之一,因为这个方法只是另一个的薄包装,我不反对不对它进行单元测试,而是确保你有一个集成测试 - 如果这是通过让您的规范 进行集成测试,那可能没问题。
最终完全取决于您和您的TDD工作流程和整体测试原则。