无法在ruby 2.0中为ivars指定关键字参数值

时间:2015-05-01 16:20:20

标签: ruby rspec keyword-argument

我正在尝试使用带有默认值的关键字参数为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的关键字参数赋值的例子似乎表明这应该有用。

1 个答案:

答案 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" }