初学者RSpec:需要帮助编写Ruby代码以通过RSpec测试(Silly Blocks练习)

pet*_*ete 1 ruby rspec

以下是来自Test-First.org的练习#5(Silly Blocks)的一部分,我正试图破解,因为我自己学习,为Ruby课程做准备.

每个练习都附带一个RSpec'_pecpec.rb'文件,用户需要编写相应的Ruby代码'.rb'文件,并继续"rake it"直到满足所有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
...
Run Code Online (Sandbox Code Playgroud)

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

def reverser(string)
  return string.reverse
end 
Run Code Online (Sandbox Code Playgroud)

唉,这显然不正确 - 耙子惨遭失败:

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)>' 
Run Code Online (Sandbox Code Playgroud)

我怀疑它与传递"默认代码块"有关,但我不知道如何构造它.在这个练习中还有很多方法可以写,但是,如果我能对初始的方法有所了解,我想我可以解决剩下的问题!

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

min*_*ank 5

据我所知,由于此方法采用块并对其执行某些操作,因此需要将方法定义为块,而不是参数.所以要启用该方法:

reverser do
  "hello"
end
Run Code Online (Sandbox Code Playgroud)

你会写它像:

def reverser
  yield.reverse
end
Run Code Online (Sandbox Code Playgroud)

要么:

def reverser(&block)
  block.call.reverse
end
Run Code Online (Sandbox Code Playgroud)

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

  • 好答案; 我想补充一点,你应该更喜欢第一个版本(使用`yield`),除非你对块进行更多操作而不是简单地调用它. (2认同)