2013-02-13 2 views
0

У меня возникли проблемы с выяснением этой проблемы. Вот что у меня есть:rspec Ruby Метод для вставки в Hash

class Dictionary 
attr_accessor :entries 

def initialize 
    @x = Hash.new 
end 

def entries 
    @x 
end 

def add(hash) 
    @x.merge!(hash) 
end 

end 

@d=Dictionary.new 
@d.add('fish' => 'aquatic animal') 
puts @d.entries 

я получаю => "fishaquatic животное"

Я ЖЕЛАТЬ получить => { 'рыба' => 'водных животных'}

ответ

2

to_s на Hash ведет себя менее чем в идеале для некоторых версий Руби. Попробуйте puts @d.entries.inspect.

Update:

Следующий код работает для меня (Ruby 1.9.3 и RSpec 2.12.0):

class Dictionary  
    def initialize 
    @x = Hash.new 
    end 

    def entries 
    @x 
    end 

    def add(hash) 
    @x.merge!(hash) 
    end 
end 

describe Dictionary do 
    before do 
    @d = Dictionary.new 
    end 

    it 'can add whole entries with keyword and definition' do 
    @d.add('fish' => 'aquatic animal') 
    @d.entries.should == {'fish' => 'aquatic animal'} 
    end 
end 
+0

что сделал !! только это ... я пытаюсь удовлетворить rpec-код ... и у него есть это '@ d.add ('fish' => 'aquatic animal')' ... любые идеи? спасибо @Levi –

+0

Я обновил ответ с помощью примера теста, который работает для меня. У вас другое поведение? – 2013-02-13 02:02:27

+0

этот один работа..thanks !! Единственное отличие, которое я вижу в том, что ваш код здесь не имеет 'attr_accessor: entries', вы знаете, почему это вызвало другой результат? –

0

Как написано, ваш код в настоящее время устанавливает @x на новый пустой Hash и затем возвращает его каждый раз, когда вы вызываете метод entries.

Попробуйте переместить этот код установки в метод инициализации:

class Dictionary 
    attr_reader :entries 

    def initialize 
     @entries = Hash.new 
    end 

    def add(hash) 
     @entries.merge!(hash) 
    end 
end 
+0

спасибо большой указатель .... судимый ход, который ... еще получение ошибки «неправильное количество аргументов» –

+0

Вы получаете эту ошибку, когда тест вызывает '@ d.add'? –

+0

Я получаю его здесь: @ d.add ('fish' => 'aquatic animal') @ d.entries.should == {'fish' => 'aquatic animal'} –

0

Похоже, мне Rspec кодов немного странным. Второй тест выполняет метод записей, а метод entries сбрасывает переменную экземпляра @x обратно в пустую. Поэтому лучше добавить переменную экземпляра в качестве attr_reader, а затем инициализировать ее, когда вы создадите новый объект словаря. Так что это будет выглядеть как этот

class Dictionary 
    attr_reader @x 

    def initialize 
     @x = Hash.new 
    end 

    def add(hash) 
     @x.merge!(hash) 
    end 
end 

и тест будет, как это

@d.add(fish: "aquatic animal") 
@d.x.should == {'fish' => "aquatic animal"} 
Смежные вопросы