Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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 DHH关于单元测试:RSpec确实是不必要的复杂吗?_Ruby On Rails_Rspec_Cucumber - Fatal编程技术网

Ruby on rails DHH关于单元测试:RSpec确实是不必要的复杂吗?

Ruby on rails DHH关于单元测试:RSpec确实是不必要的复杂吗?,ruby-on-rails,rspec,cucumber,Ruby On Rails,Rspec,Cucumber,我碰巧是Ruby Inside的订户,因为我对Rails特别感兴趣。昨天,Rails的创建者DavidHeinemeier Hansson几乎说他只是在使用测试/单元。我会理解的,因为这是Rails内部的,但他似乎给出了一个强有力的意见。他认为RSpec和Cucumber是不必要的复杂 我通常不会太在意,但这取决于谁说了什么。我非常尊重汉森,他的观点让我思考。当我开始使用Rails时,我从未真正研究过测试/单元。只吃了花生和黄瓜 这就是为什么我需要你的洞察力。您是否认为RSpec确实很复杂,因为

我碰巧是Ruby Inside的订户,因为我对Rails特别感兴趣。昨天,Rails的创建者DavidHeinemeier Hansson几乎说他只是在使用测试/单元。我会理解的,因为这是Rails内部的,但他似乎给出了一个强有力的意见。他认为RSpec和Cucumber是不必要的复杂

我通常不会太在意,但这取决于谁说了什么。我非常尊重汉森,他的观点让我思考。当我开始使用Rails时,我从未真正研究过测试/单元。只吃了花生和黄瓜


这就是为什么我需要你的洞察力。您是否认为RSpec确实很复杂,因为附加值不多?编写测试/单元是否花费更少的时间和精力

我的建议是将Shoulda(extends Test::Unit)或RSpec与水豚和-no-Cucumber一起使用

我认为对嵌套上下文使用RSpec或Shoulda是绝对值得的。RSpec确实很重(也许超重),我对此持怀疑态度

黄瓜,我终于明白了,比它通常的价值要麻烦得多。通过简单的集成测试和Capybara,您可以更简单、更稳健地完成所需的任务。记住——水豚黄瓜,水豚是相当有能力的所有自己

Shoulda很好,因为它只是为标准的Test::Unit框架增加了方便,因此比RSpec轻得多(从技术上讲,每个解决方案都解决了不同的问题,但它们都提供了嵌套的上下文功能)。RSpec的优点是使断言更自然地读取,并且在许多情况下还生成更多有用的失败消息,而不需要在断言上编写消息参数


另外,请记住cumber实际上并不需要RSpec,所以如果您想继续使用cumber,只需使用Test::Unit即可。选择比比皆是。

都是关于语义的。RSpec和Test::Unit在功能上类似。就我个人而言,我一直更喜欢RSpec,因为我发现使用它编写测试更自然。我还喜欢编写的简单性,并且提供的默认匹配器非常有用

黄瓜是一种完全不同的动物。是的,如果您没有正确地组织步骤定义,那么它相当麻烦,并且很难维护,但是它确实有一个非常强大的用例,那就是当您的客户编写您的规范时


我曾经参与过一些项目,其中客户一直在与我们的一个QA团队一起编写黄瓜场景。作为一个非技术人员,在代码中指定用户故事是一种非常平易近人和自然的方式。Cucumber在遵循敏捷实践方面确实帮助了我们。最终产品的质量从中受益,但不,我不喜欢黄瓜作为开发者:)

这是个人品味的问题

我喜欢写简单的黄瓜测试,不必担心细节。只是测试我的应用程序的“快乐”路径。(便携、易懂、速度慢)

我把细节留给测试/单元。(简单,快速)

需要更多的时间来理解:

get :products, :session => @session_id_for_product_banana
assert_select "table" do
  assert_select "td#name", "Banana"
end
而不是

When I go to the banana page
Then I should see "Banana"
当然这些测试是不平等的,但谁在乎“香蕉”是在div还是在表中,或者没有正确的html-id呢


我不喜欢功能测试,因为重构后,id可能会消失,会话期望可能会改变。如果是这种情况,您需要重构代码和测试。如果您使用cucumber,就不必更改场景。

我同意DHH,因为rails测试/单元看起来不错。我使用了rails测试框架、rspec、selenium等,感觉和DHHif一样,如果你有资源加上金钱加上50%的时间。不用说相对冻结的需求BDD/TDD很好,否则请坚持DHH所说的。非常感谢他写了这篇博文。事实上,rpsec免费提供的automagic失败信息是其吸引力的很大一部分。自从我写了这篇博文后,我知道Cucumber不需要这么麻烦。它并不适用于所有项目,但它可以成为编写规范的非常有价值的方法。编写好Cumber测试的关键是根据业务价值编写测试,避免对具体实现的尊重。如果你的小黄瓜里有“页面”或“点击”之类的词,那就不太好了。此外,Cucumber测试不一定需要满栈。Cucumber测试可能会在较低的级别上执行,使用一些集成测试通过Capybara进行完整堆栈验证。如果您确实关心表中的“Banana”,而不是仅仅是错误消息“undefined method'find'for'Banana':String”的一部分,该怎么办?这可能会发生,但不太可能。更可能的情况是id发生了变化,或者您决定使用div。如果视图不包含逻辑,那么通常您会在单元测试中遇到这种错误。此外,Cucumber在运行时错误上往往会出现堆栈跟踪。