Ruby не выдает правильное исключение - PullRequest
0 голосов
/ 10 февраля 2012

Я пытаюсь вызвать 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

Результат ниже:

Неудачи:

1) Карта должна проверить, находится ли номер карты от 1 до 13 Ошибка / Ошибка: ожидаем {Card.new (Suit :: CLUB, 14)}. To Raise_error ("CardNumberNotValid") ожидаемое исключение с "CardNumberNotValid", полученное # для false: FalseClass> # ./card_spec.rb:8

Завершено за 0,00064 секунды 1 пример, 1 ошибка

Неудачные примеры:

rspec ./card_spec.rb:7 # Карта должна проверить, находится ли номер карты между 1 и 13

Не могли бы вы помочь?

Ответы [ 2 ]

1 голос
/ 10 февраля 2012
1>number>13

Не работает в Ruby.Используйте что-то вроде:

number.between?(1, 13)
0 голосов
/ 10 февраля 2012

Если вы подняли ошибку в ruby ​​без типа:

raise "My pink pig"

ruby ​​собирается вызвать RuntimeError с сообщением «Моя розовая свинья» (при условии, что вы еще не обрабатываете ошибку, и в этом случае новая ошибка будет иметь тот же тип).

Вероятно, вы должны ожидать свою ошибку иначе:

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