Pruebas unitarias y TDD en Ruby: Matchers, Assertions y Estructura
Pruebas unitarias
assert(test, msg = nil): Comprueba que la condición es verdadera.
assert_equal(expected, actual, msg = nil): Verifica que dos valores sean iguales.
assert_not_equal(expected, actual, msg = nil): Verifica que dos valores no sean iguales.
assert_nil(object, msg = nil): Verifica que un objeto sea
nil.assert_not_nil(object, msg = nil): Verifica que un objeto no sea
nil.assert_match(pattern, string, msg = nil): Verifica que un string coincide con un patrón.
assert_no_match(pattern, string, msg = nil): Verifica que un string no coincide con un patrón.
assert_in_delta(expected, actual, delta, msg = nil): Verifica que dos números están dentro de un rango de diferencia (delta).
assert_raises(*exception_classes) { ... }: Verifica que se lanza una excepción.
assert_operator(object, operator, operand, msg = nil): Verifica que una operación devuelve verdadero (
object.operator(operand)).assert_instance_of(class, object, msg = nil): Verifica que un objeto es de una clase específica.
assert_kind_of(class, object, msg = nil): Verifica que un objeto es de una clase o una subclase.
assert_same(expected, actual, msg = nil): Verifica que dos objetos son el mismo objeto (misma referencia).
assert_not_same(expected, actual, msg = nil): Verifica que dos objetos no son el mismo objeto.
assert(defined?(Clase), msg)
TDD
Estructura
describe: Agrupa ejemplos relacionados.
context: Agrupa ejemplos en un contexto específico (útil para separar condiciones).
it: Define un caso de prueba o ejemplo.
Matchers
Igualdad y equivalencia
expect(actual).to eq(expected): Verifica que dos valores sean iguales.expect(actual).to eql(expected): Verifica que dos valores sean estrictamente iguales.expect(actual).to be(expected): Verifica que sean el mismo objeto (misma referencia).expect(actual).to_not eq(expected): Verifica que dos valores no sean iguales.
Verdad/Falsedad/Nil
expect(actual).to be_truthy: Verifica que el valor es "truthy".expect(actual).to be_falsey: Verifica que el valor es "falsey".expect(actual).to be_nil: Verifica que esnil.
Tipos y clases
expect(actual).to be_a(Class): Verifica que sea de la clase específica.expect(actual).to be_an_instance_of(Class): Verifica que sea exactamente de la clase.
Comparaciones
expect(actual).to be > valueexpect(actual).to be >= valueexpect(actual).to be < valueexpect(actual).to be <= valueexpect(actual).to be_between(min, max): Verifica que está en un rango.
Excepciones
expect { ... }.to raise_error: Verifica que se lanza un error.expect { ... }.to raise_error(ErrorClass): Verifica que se lanza un error específico.
Expresiones regulares
expect(string).to match(/regex/): Verifica que coincide con un regex.
Colecciones
expect(collection).to include(item): Verifica que incluye un elemento.expect(collection).to start_with(prefix): Verifica el inicio.expect(collection).to end_with(suffix): Verifica el final.