测试Redcarpet Markdown助手

时间:2012-03-21 17:16:35

标签: ruby-on-rails ruby rspec tdd markdown

我在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

1 个答案:

答案 0 :(得分:1)

有两种选择:

  1. 记录Redcarpet::Markdown,并期望它应该收到什么:

    expect(Redcarpet::Markdown).to receive(:new).with(...) # `with` args omitted for brevity
    markdown(text)
    

    这里的问题是方法和测试之间的耦合非常高。在不破坏测试的情况下重构该方法是非常困难的,即使该方法实际上是相同的。

  2. 直接断言输出文本的正确性:

    expect(markdown(text)).to eq 'This is markdownified'
    

    这允许你更好地重构,但它看起来更像是集成测试,而不是单元测试,并且几乎测试Redcarpet比你自己的方法更多。单元测试通常应该假设他们调用的外部方法正常工作。

  3. 这是测试对我来说多余的情况之一,因为这个方法只是另一个的薄包装,我不反对不对它进行单元测试,而是确保你有一个集成测试 - 如果这是通过让您的规范 进行集成测试,那可能没问题。

    最终完全取决于您和您的TDD工作流程和整体测试原则。