11

[1,2,3].should include(1)irbで使いたいです。私は試した:

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

しかし、有効な場合でも機能しません。どのように使用できます[1,2,3].should include(1)か?

4

1 に答える 1

15

あなたは近いですが、includeトップレベルで呼び出すと、Module#include. これを回避するには、元の include メソッドを削除して、代わりに RSpecincludeが呼び出されるようにする必要があります。

includeまず、システムがどこから来たのかを理解しましょう。

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

Ok。で定義されているようmainです。これは Ruby のトップレベル オブジェクトです。それでは、元のインクルードの名前を変更して削除しましょう。

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

これで、本題に入ることができます。

> require 'rspec'
> inc RSpec::Matchers
> [1,2,3].should include(1)
=> true
于 2013-02-07T13:43:54.953 に答える