Ruby on rails 我能';我的斐波那契序列无法通过Ruby中的rspec测试。我该怎么做呢?

Ruby on rails 我能';我的斐波那契序列无法通过Ruby中的rspec测试。我该怎么做呢?,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,有人给了我一个在Ruby中通过斐波那契序列的测试,从那以后我一直在寻找答案。我找不到任何令人满意的答案,我能解决的“最近的”问题是(在看到关于斐波那契的一些东西之后): 这就是测试: describe "Fibonacci" do it "can output the fibonacci sequence for 5 numbers" do expect(Fibonacci.generate(5)).to eql([0,1,1,2,3]) expect(Fibonacci.g

有人给了我一个在Ruby中通过斐波那契序列的测试,从那以后我一直在寻找答案。我找不到任何令人满意的答案,我能解决的“最近的”问题是(在看到关于斐波那契的一些东西之后):

这就是测试:

describe "Fibonacci" do
  it "can output the fibonacci sequence for 5 numbers" do
    expect(Fibonacci.generate(5)).to eql([0,1,1,2,3])
    expect(Fibonacci.generate(5).last).to eql(3)
    expect(Fibonacci.generate(5)[-2]).to eql(2)
    expect(Fibonacci.generate(5)[2]).to eql(1)
  end

  it "can output the fibonacci sequence for 20 numbers" do
    expect(Fibonacci.generate(20)).to eql([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181])
    expect(Fibonacci.generate(20).last).to eql(4181)
    expect(Fibonacci.generate(20)[-2]).to eql(2584)
    expect(Fibonacci.generate(20)[5]).to eql(5)
    expect(Fibonacci.generate(20)[6]).to eql(8)
    expect(Fibonacci.generate(20)[7]).to eql(13)
    expect(Fibonacci.generate(20)[-3]).to eql(1597)
  end

  it "can output the fibonacci sequence for 50 numbers" do
    expect(Fibonacci.generate(50)).to eql([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049])
    expect(Fibonacci.generate(50).last).to eql(7778742049)
    expect(Fibonacci.generate(50).count).to eql(50)
    expect(Fibonacci.generate(50)[24]).to eql(46368)
    expect(Fibonacci.generate(50)[12]).to eql(144)
  end
end

我应该更改什么以使其满足测试要求?

您拥有的
generate
方法是一个实例方法,但是您的测试正在测试一个类方法。要使该方法成为Ruby中的类方法,请在方法签名中使用
self
关键字,如下所示:

def self.generate(n)
def Fibonacci.generate(n)
或者在签名中使用类名,如下所示:

def self.generate(n)
def Fibonacci.generate(n)

此外,测试本身也没有什么用处,需要重新编写。

首先,请解释此代码是如何工作的。欢迎使用堆栈溢出。请阅读有关问题文本格式的文档。事实上,阅读你的问题非常困难,这使得我们帮助你变得更加困难和缓慢。请改进你问题的代码格式以简化阅读。我不知道。我对这个完全陌生。如果这不是应该在这里,有一个网站为所有初学者,请?测试可能都失败了。看看测试期望什么样的结果,看看你的方法返回什么样的结果。给我们解释一下。有人给出解决方案是没有用的,因为你不会学到任何东西。