Ruby on rails 测试红地毯降价助手
我在Ruby on rails 测试红地毯降价助手,ruby-on-rails,ruby,rspec,tdd,markdown,Ruby On Rails,Ruby,Rspec,Tdd,Markdown,我在application\u helper.rb中有一个降价助手,看起来像这样 你会如何为这样的东西编写测试?另外,这是从markdown生成简单HTML的最佳方法吗 谢谢 def markdown(text) Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true).render(text).html_safe end 我想到两个选择:
application\u helper.rb
中有一个降价助手,看起来像这样
你会如何为这样的东西编写测试?另外,这是从markdown生成简单HTML的最佳方法吗
谢谢
def markdown(text)
Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true).render(text).html_safe
end
我想到两个选择:
expect(Redcarpet::Markdown).to receive(:new).with(...) # `with` args omitted for brevity
markdown(text)
这里的问题是,方法和测试之间的耦合非常高。在不破坏测试的情况下重构方法是非常困难的,即使方法的功能实际上是相同的expect(markdown(text)).to eq 'This is markdownified'
这使您能够更好地重构,但它看起来更像是一个集成测试,而不是单元测试,并且几乎是在测试红地毯,而不是您自己的方法。单元测试通常应该假设它们调用的外部方法工作正常这最终取决于您和您的TDD工作流程以及总体测试原则。我在自己的应用程序测试中使用了这种方法,并从rspec Expections得到了一个关于
应该的弃用警告,并改用expect
方法。有没有一种方法可以通过expect
传递?@RodrigoArgumedo在我写这个答案时,expect语法并不存在,但我已经更新了它以使用新的语法。