2013-02-07 43 views
10

Tôi muốn sử dụng [1,2,3].should include(1) trong irb. Tôi đã thử:Cách sử dụng các kỳ vọng RSpec trong 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>' 

Nhưng nó không hoạt động mặc dù it's a valid case. Làm cách nào để sử dụng [1,2,3].should include(1)?

Trả lời

13

Bạn đang đóng, nhưng gọi số include ở cấp cao nhất, bạn sẽ gọi số Module#include. Để giải quyết vấn đề này, bạn cần xóa phương thức bao gồm gốc để thay vào đó, số include của RSpec được gọi.

Đầu tiên chúng ta hãy tìm ra nơi hệ thống include đến từ:

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

Ok. Có vẻ như nó được xác định trong main. Đây là đối tượng cấp cao nhất của Ruby. Vì vậy, hãy đổi tên và loại bỏ các gốc bao gồm:

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

Bây giờ chúng ta có thể nhận được xuống để kinh doanh:

> require 'rspec' 
> inc RSpec::Matchers 
> [1,2,3].should include(1) 
=> true 
Các vấn đề liên quan