2012-02-09 45 views
0

我想提出2例外,當我的變數之一是大於13或小於1 也我想提出例外,如果我的的類型不是其中一個定義的一個。 這是我的代碼:紅寶石不會提出正確的異常

require "../lib/suit" 
class Card 
    attr_reader :suit,:number 
def initialize(suit,number) 
    raise "CardNumberNotValid" if 1>number>13 
    raise "SuitNotValid" if suit!=Suit::CLUB or suit!=Suit::HEART or suit!=Suit::DIAMOND or suit!=Suit::SPADE 
    @suit=suit 
    @number=number 
end 
end 

,這是我的測試:

require "rspec" 
require "../lib/suit" 
require "../lib/card" 

describe Card do 

    it "should check if card number is between 1 and 13" do 
    expect{Card.new(Suit::CLUB,14)}.to raise_error("CardNumberNotValid") 
    end 
end 

結果如下:

Failures:

1) Card should check if card number is between 1 and 13 Failure/Error: expect{Card.new(Suit::CLUB,14)}.to raise_error("CardNumberNotValid") expected Exception with "CardNumberNotValid", got #' for false:FalseClass> # ./card_spec.rb:8

Finished in 0.00064 seconds 1 example, 1 failure

Failed examples:

rspec ./card_spec.rb:7 # Card should check if card number is between 1 and 13

可以請你幫忙嗎?

回答

1
1>number>13 

不Ruby的工作。使用類似:

number.between?(1, 13) 
+0

謝謝,我沒有注意到:)我是新來的Ruby – 2012-02-09 20:38:16

0

如果提高Ruby中的錯誤沒有一個類型:

raise "My pink pig" 

紅寶石是要提高與「我的粉紅豬」會拋出一個RuntimeError作爲消息(假設你是不是已經在處理錯誤,在這種情況下新的錯誤將具有相同的類型)。

你或許應該有不同的期待您的錯誤:

expect{Card.new(Suit::CLUB,14)}.to raise_error(RuntimeError, "CardNumberNotValid") 
+0

謝謝,但它不工作同樣的錯誤了#」假:FalseClass> – 2012-02-09 20:33:30