我正在尝试编写一种将导致像这样的rspec测试通过的方法:
it "starts the thing and move on" do
class.method_1("Name One")
class.method_1("Name Two")
expect(class.method_2).to eq "Some string Name One"
expect(class.method_3).to eq ["Name Two"]
end
method_1
只是将名称添加到数组,然后method_3
返回数组(在initialize
方法中定义):
def method_1(name)
@array << name
end
def method_3
@array
end
我认为插入@array[0]
到字符串中并用于@array.delete_at(0)
修改数组将非常简单。像这样:
def method_2
p "Some string #{@array[0]}"
@array.delete_at(0)
end
但是该方法返回"Name One"
而不是字符串。如果我注释掉删除代码,则字符串将正确返回,但尚未修改我的数组。我已经在Ruby文档中工作了很长时间,但是#shift
在返回已删除的项目时也遇到了同样的问题。
我几乎可以肯定我已经把这个复杂化了-我想念的是什么?
您可以将所有这些折叠为更常规的Ruby,如下所示:
class MyTestClass
attr_reader :array
def initialize
@array = [ ]
end
def push(s)
@array << s
end
def special_shift
"Some string #{@array.shift}"
end
end
然后在用法上:
it "starts the thing and move on" do
my_thing.push("Name One")
my_thing.push("Name Two")
expect(my_thing.special_shift).to eq "Some string Name One"
expect(my_thing.array).to eq ["Name Two"]
end
使用诸如push
和shift
与Ruby约定一致的名称可以使方法的目的和操作容易理解得多。
当涉及到实现时,method_3
您会忘记可以在#{...}
块中内联任何所需的内容,甚至包括修改事物的方法。该p
方法用于显示,它不会返回任何内容。要返回某项,您需要将其作为最后一项评估(隐式)或通过使用return
(显式)进行评估。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句