2014-09-18 2 views
-1

Я пытаюсь изучить rspec и написать с ним программу hello-world. Но похоже, что я не могу требовать моего класса должным образом. Он всегда показывает неопределенную ошибку метода. Это моя структура файла:Rspec не может потребовать файл

├── lib 
│   └── map.rb 
└── spec 
    ├── map_spec.rb 
    └── spec_helper.rb 

И мой map_spec.rb файл:

require 'map' 

describe 'Map' do    
    it 'should iterate over array and return new array based on some simple addition' do 
    expect([1,2,3]).map_sam_mario {|e| e+1}.to eq [2,3,4] 
    end 
end 

Это мой map.rb файл:

class Array 
    def map_sam_mario    
    [2,3,4] 
    end 
end 

И когда я делаю RSpec в текущий каталог, он всегда показывает эту ошибку:

NoMethodError: 
     undefined method `map_sam_mario' for # <RSpec::Expectations::ExpectationTarget:0x007fad5a9e8270> 

Я следил за скринкастом и написал точно такой же код, как и видео. Я не знаю, почему это произошло. Я использую рубин 2.1.0 и RSpec 3.0.3

+2

'ожидать ([1,2,3] .map_sam_mario {| e | e + 1}). To eq [2,3,4]' – dddd1919

+0

Есть ли что-то не так с этой линией? –

+0

Код, который я пишу, отличается от вашего, патч обезьяны, который вы пишете, вызывается 'expect()', но не является экземпляром 'Array'. – dddd1919

ответ

1
expect([1,2,3]).map_sam_mario {|e| e+1}.to eq [2,3,4] 

Вы называете map_sam_mario на expect. Из-за этого нет такого метода, потому что это класс RSpec::Expectations::ExpectationTarget.

Эта линия должна быть такой:

expect([1,2,3].map_sam_mario {|e| e+1}).to eq [2,3,4] 

Так map_sam_mario должен называться на вашем Array.

Эта ошибка не имеет отношения к require.

Смежные вопросы