2012-03-21 40 views
2

我有一个像application_helper.rb这样的减价帮手。测试Redcarpet Markdown帮手

你会如何去编写这样的测试?另外,这是从markdown生成简单HTML的最佳方式吗?

谢谢!

def markdown(text) 
    Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true).render(text).html_safe 
end 

回答

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' 
    

    这使您可以重构更好,但它似乎更像一个集成测试,而不是一个单元测试,并且几乎是测试隆重的接待超过您自己的方法。单元测试通常应该假设它们调用的外部方法正常工作。

这是哪里的测试感到多余的我,因为该方法仅仅是围绕另一个瘦包装的案件之一,我也不会反对没有单元测试它,而是确保你有一个集成测试如果你的规格的集成测试,那么这可能是好的。

尽管如此,它最终取决于您和您的TDD工作流程和整体测试原则。

+0

我正在为自己的应用程序测试做这个方法,并且从rspec-expectations得到了关于'should'的弃用警告,并使用'expect'方法代替。有没有一种方法可以通过expect? – 2015-07-02 19:05:15

+1

@RodrigoArgumedo当我编写这个答案时,期望的语法不在我身边,但我已经更新它来使用新的语法。 – 2015-07-02 23:22:15