2014-09-18 6 views
-1

J'essaie d'apprendre rspec et d'écrire un programme Hello-World avec elle. Mais il semble que je ne puisse pas exiger ma classe correctement. Il affiche toujours une erreur de méthode non définie. Ceci est ma structure de fichier:Rspec ne peut pas exiger le fichier

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

Et mon fichier 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 

Ceci est mon fichier map.rb:

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

Et quand je fais un rspec dans la répertoire en cours, il affiche toujours cette erreur:

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

Je suivais un screencast et écrivais exactement le même code que la vidéo. Je ne sais pas pourquoi c'est arrivé. J'utilise Ruby 2.1.0 et rspec 3.0.3

+2

'expect ([1,2,3] .map_sam_mario {| e | e + 1}). À eq [2,3,4]' – dddd1919

+0

Y at-il un problème avec cette ligne? –

+0

Le code que j'ai écrit est différent du vôtre, le patch de singe que vous écrivez est appelé par 'expect()' mais pas une instance de 'Array'. – dddd1919

Répondre

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

Vous appelez map_sam_mario sur expect. De cause il n'y a pas une telle méthode parce que c'est la classe RSpec::Expectations::ExpectationTarget.

Cette ligne doit ressembler à ceci:

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

Alors map_sam_mario devrait être appelé sur votre Array.

Cette erreur n'a rien à voir avec require.

Questions connexes