2012-01-11 87 views
11

我在使用RSpec 2.8傳遞這個簡單測試時遇到了問題。有參數的方法RSpec測試ArgumentError

我想寫一個簡單的測試,在需要它們的方法上缺少參數(即ArgumentError:錯誤的參數數量('x'代表'y'))。

我的測試是測試寶石組件的方法,像這樣:

describe "#ip_lookup" do 
    it "should raise an ArgumentError error if no parameters passed" do 
    expect(@geolocater.ip_lookup).to raise_error(ArgumentError) 
    end 
end 

我的寶石模塊的代碼如下所示:

module Geolocater 
    def ip_lookup(ip_address) 
    return ip_address 
    end 
end 

我的規格與此輸出運行。

Failure/Error: expect(@geolocater.ip_lookup).to raise_error(ArgumentError) 
    ArgumentError: 
     wrong number of arguments (0 for 1) 
    # ./lib/geolocater.rb:4:in `ip_lookup' 
    # ./spec/geolocater_spec.rb:28:in `block (3 levels) in <top (required)>' 

我在這裏錯過了什麼?

回答

23

你需要一個塊傳遞給#expect,不是正規的說法:

describe "#ip_lookup" do 
    it "should raise an ArgumentError error if no parameters passed" do 
    expect { @geolocater.ip_lookup }.to raise_error(ArgumentError) 
    end 
end 
+0

謝謝!這很好! – thoughtpunch 2012-01-11 16:15:17

+0

謝謝! 2013年仍然很棒。 – 2013-08-07 00:52:01

+0

也在2014年;) – macsig 2014-01-01 09:07:23