11 votes

Comment utiliser les attentes RSpec dans irb

Je voudrais utiliser [1,2,3].should include(1) en irb. J'ai essayé :

~$ irb
1.9.3p362 :001 > require 'rspec/expectations'
 => true 
1.9.3p362 :002 > include RSpec::Matchers
 => Object 
1.9.3p362 :003 > [1,2,3].should include(1)
TypeError: wrong argument type Fixnum (expected Module)
    from (irb):3:in `include'
    from (irb):3
    from /home/andrey/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

Mais ça ne marche pas c'est un cas valable . Comment puis-je utiliser [1,2,3].should include(1) ?

15voto

Casper Points 15645

Vous êtes proche, mais vous appelez include au niveau supérieur, vous appellerez Module#include . Pour contourner ce problème, vous devez supprimer la méthode d'inclusion d'origine afin que la méthode RSpec include est appelé à la place.

D'abord, trouvons où le système include vient de :

> method :include
=> #<Method: main.include>

Ok. On dirait que c'est défini dans main . C'est l'objet de premier niveau de Ruby. Renommons et supprimons l'include original :

> class << self; alias_method :inc, :include; remove_method :include; end

Maintenant on peut passer aux choses sérieuses :

> require 'rspec'
> inc RSpec::Matchers
> [1,2,3].should include(1)
=> true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X