Как протестировать тот, недействительные аргументы повышают Исключение ArgumentError с помощью RSpec?

Я пишу RubyGem, который может повысить ArgumentError если аргументы, предоставленные его отдельному методу, недействительны. Как я могу записать тест для этого использования RSpec?

Пример ниже показывает вид реализации, которую я имею в виду. bar метод ожидает единственный булев аргумент (:baz), тип которого проверяется, чтобы удостовериться, что это на самом деле - булевская переменная:

module Foo
  def self.bar(options = {})
    baz = options.fetch(:baz, true)
    validate_arguments(baz)
  end

  private
  def self.validate_arguments(baz)
    raise(ArgumentError, ":baz must be a boolean") unless valid_baz?(baz)
  end

  def self.valid_baz?(baz)
    baz.is_a?(TrueClass) || baz.is_a?(FalseClass)
  end
end
15
задан John Topley 16 May 2010 в 10:55
поделиться

3 ответа

Я использую что-то похожее на то, что написал JHurra:

it "should raise ArgumentError for arguments that are not boolean" do
  expect{ Foo.validate_arguments(nil) }.to raise_error(ArgumentError)
end

Псевдоним не нужен (rspec 1.3).

29
ответ дан 1 December 2019 в 01:38
поделиться

Если не очень важно, чтобы вы создавали исключение для небулевых значений, я думаю, было бы более элегантно преобразовать значение в логическое значение, например, с помощью !! :

baz = !! options.fetch(:baz, true)

Таким образом, клиентский код может передавать любое истинное или ложное значение, но вы все равно можете быть уверены, что значение, с которым вы работаете, является правильным логическим значением. Вы также можете использовать тернарный оператор (например, baz = options.fetch (: baz, true)? True: false , если вам кажется, что !! неясно.

{{ 1}}
2
ответ дан 1 December 2019 в 01:38
поделиться
it "should raise ArgumentError for arguments that are not boolean" do
  lambda{ Foo.validate_arguments(something_non_boolean) }.should raise_error(ArgumentError)
end
3
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: