我正在尝试使用带有默认值的关键字参数为ruby 2.1.5中的类编写构造函数,但是对实例变量的赋值似乎不起作用:
class Base
attr_accessor :name
def initialize name: "void",
contents: []
@name = name
@contents = contents
end
end
在我的rspec测试中:
it 'should take optional param name' do
subject { Base.new(name: "fnordland") }
expect(subject.name).to eq "fnordland"
end
失败了:
2) Base initialize should take optional param location_name
Failure/Error: expect(subject.name).to eq "fnordland"
expected: "fnordland"
got: "void"
(compared using ==)
初始化程序在IRB中按预期工作,但测试失败。 我知道在我的骨头里,这可能是非常小的,非常愚蠢但是我很沮丧 - 在ruby 2.1中对ivars的关键字参数赋值的例子似乎表明这应该有用。
答案 0 :(得分:1)
看起来您的测试用例的排序问题。使用RSpec DSL,它有时可能会让人感到困惑。您需要执行以下任一操作之一:
it 'should take optional param name' do
base = Base.new(name: "fnordland")
expect(base.name).to eq "fnordland"
end
或:
subject { Base.new(name: "fnordland") }
it { expect(subject.name).to eq "fnordland" }