【问题标题】:Beginner RSpec: Need help writing Ruby code to pass RSpec tests (Silly Blocks exercise)初学者 RSpec:需要帮助编写 Ruby 代码以通过 RSpec 测试(傻块练习)
【发布时间】:2013-05-01 03:25:00
【问题描述】:

以下是来自 Test-First.org 的练习 #5(愚蠢的块)的一部分,我在自学时尝试破解它,为 Ruby 课程做准备。

每个练习都附带一个 RSpec '_spec.rb' 文件,用户需要编写一个相应的 Ruby 代码 '.rb' 文件,并继续“rake”直到满足其中的所有 RSpec 测试(示例) .至少这是我的解释,并且我已经完成了前四个练习,但是,这个练习中的 RSpec 语法让我很难过。 (不幸的是,我不仅对编码很陌生,而且我对 RSpes 也很陌生,而且我还无法在线找到一个好的新手级 RSpec/TDD 介绍)。

因此,我希望 RSpec 常驻专家能提供帮助。基本上,我想知道下面的 RSpec 语法到底是什么告诉我写代码?

require "silly_blocks"

describe "some silly block functions" do

  describe "reverser" do
    it "reverses the string returned by the default block" do
      result = reverser do
        "hello"
      end
      result.should == "olleh"
    end
...

我假设我要编写一个名为“reverser”的方法,它接受一个字符串参数,并返回反转的字符串,例如:

def reverser(string)
  return string.reverse
end 

唉,这显然是不正确的 - 耙子惨败:

some silly block functions
  reverser
    reverses the string returned by the default block (FAILED - 1)

Failures:

  1) some silly block functions reverser reverses the string returned by the def
ault block
     Failure/Error: result = reverser do
     ArgumentError:
       wrong number of arguments (0 for 1)
     # ./05_silly_blocks/silly_blocks.rb:3:in `reverser'
     # ./05_silly_blocks/silly_blocks_spec.rb:15:in `block (3 levels) in <top (r
equired)>' 

我怀疑它与传递“默认代码块”有关,但我不确定如何构建它。在这个练习中还有很多方法可以写,但是,如果我能对最初的方法有所了解,我想我可以解决剩下的!

非常感谢,Danke sehr,Muchas gracias! :)

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

    据我所知,由于此方法接受一个块并对其进行处理,因此您需要定义该方法以接受一个块,而不是一个参数。因此,要启用该方法来执行此操作:

    reverser do
      "hello"
    end
    

    你可以这样写:

    def reverser
      yield.reverse
    end
    

    或:

    def reverser(&block)
      block.call.reverse
    end
    

    现在,当将块传递给它时,上述方法将起作用:reverser { "hello" },但在使用参数时不起作用:reverser("hello")

    【讨论】:

    • 好答案;我要补充一点,你应该更喜欢第一个版本(yield),除非你对块做的不仅仅是调用它。
    • 感谢您的澄清。
    • @mind.blank:谢谢,就是这样! RSpec 文件进行测试,所以在我的情况下,我实际上不需要调用该方法。找到一个 RSpec 介绍性截屏视频,试一试。
    • @mind.blank:嗯,我的进步是短暂的。我理解这个解决方案,因为它应用了一种方法(.reverse)。在练习的后半部分,它期望这个方法也能按顺序反转多个单词。
    • @mind.blank: Cont: 所以,如果代码块包含“hello dolly”,RSpec 需要 result.should == “olleh yllod”。如何使用更多代码操作传入的字符串?如果你有兴趣,练习在这里:[link] (github.com/alexch/learn_ruby/tree/master/05_silly_blocks)
    猜你喜欢
    • 2011-12-19
    • 2017-04-12
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2022-01-17
    相关资源
    最近更新 更多