verdaderos verdaderas valido validez probar premisas para metodos invalidos falsas falsa ejemplos conclusiones conclusion argumentos argumento ruby rspec

ruby - verdaderas - ¿Cómo probar que los argumentos inválidos generan una excepción ArgumentError usando RSpec?



metodos para probar la validez de un argumento (3)

A menos que sea muy importante que arroje una excepción para valores no booleanos, creo que sería más elegante forzar el valor a un booleano, por ejemplo con !! :

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

De esta forma, el código del cliente puede pasar cualquier valor falso o falso, pero aún así puede estar seguro de que el valor con el que trabaja es un valor booleano adecuado. También podría usar el operador ternario (por ejemplo, baz = options.fetch(:baz, true) ? true : false si cree que no está claro.

Estoy escribiendo un RubyGem que puede generar un ArgumentError si los argumentos proporcionados a su único método no son válidos. ¿Cómo puedo escribir una prueba para esto usando RSpec?

El siguiente ejemplo muestra el tipo de implementación que tengo en mente. El método bar espera un único argumento booleano ( :baz ), cuyo tipo se verifica para asegurarse de que realmente es un booleano:

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


Uso algo similar a lo que JHurra publicó:

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

No es necesario alias (rspec 1.3).


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