2015-05-01 6 views
1

Я пытаюсь написать конструктор для класса в ruby ​​2.1.5 с использованием аргументов ключевых слов со значениями по умолчанию, однако назначение переменных экземпляра не работает:Проблема с назначением значений аргументов ключевых слов для ivars в ruby ​​2.0

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, но тест терпит неудачу. Я знаю в своих костях, что это, вероятно, что-то очень маленькое и совершенно идиотское, но я смущен - примеры назначения аргументов ключевого слова для ivars в ruby ​​2.1, похоже, указывают на то, что это должно работать.

+0

Ваш код работает как следует, когда я запускаю его. – Adrian

+0

Кажется, работает в irb, поэтому я считаю, что проблема, скорее всего, мой тест. – Chazu

+1

'subject' должен идти [вне вашего' it' блока] (http://betterspecs.org/#subject). –

ответ

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