2013-02-07 9 views
10

irbで[1,2,3].should include(1)を使用したいと思います。私が試した:irbでRSpecの期待値を使用する方法

~$ 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>' 

しかし、それはit's a valid caseかかわらず動作しません。 [1,2,3].should include(1)を使用するにはどうすればよいですか?

答えて

13

あなたは近くですが、最上部にincludeと電話すると、Module#includeが呼び出されます。それを回避するには、元のインクルードメソッドを削除して、RSpecのincludeが代わりに呼び出されるようにする必要があります。 [OK]を

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

まず、システムincludeはどこから来るのを把握しましょう。 mainで定義されているようです。これはRubyのトップレベルオブジェクトです。それでは、オリジナルの名前を変更し、削除してみましょう、次のとおりです

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

今、私たちは仕事に取り掛かることができます。

> require 'rspec' 
> inc RSpec::Matchers 
> [1,2,3].should include(1) 
=> true 
関連する問題