Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 测试红地毯降价助手_Ruby On Rails_Ruby_Rspec_Tdd_Markdown - Fatal编程技术网

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语法并不存在,但我已经更新了它以使用新的语法。