Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • Tipos de pruebas
  • TDD (Test Driven Development) y BDD (Behaviour Driven Development)
  • Librerías más populares
  • Minitest
  • RSpec
  • Assertions
  • assert
  • refute
  • assert_equal
  • Setup y teardown
  1. Ruby on Rails II

Testing en Ruby

PreviousUsando JavaScript (y jQuery) en RailsNextTesting en Rails

Last updated 2 years ago

Las pruebas automatizadas, o tests, nos ayudan a prevenir errores, especialmente cuando hacemos nuevos cambios sobre nuestro código, haciendo nuestras aplicaciones más mantenibles en el tiempo.

La desventaja de escribir pruebas es que es lento y es más código por mantener. Pero en el mediano y largo plazo las ventajas superan las desventajas.

Tipos de pruebas

En general, las pruebas se pueden dividir en dos grandes categorías: unitarias y de integración.

Las pruebas unitarias se escriben para probar la lógica de métodos específicos de la aplicación, aislando sistemas externos como bases de datos, otros servidores, etc.

Por ejemplo, una prueba para un método que calcula el número de palabras de un texto sería una prueba unitaria.

Las pruebas de integración se escriben para probar funcionalidades completas de la aplicación y pueden involucrar componentes y sistemas externos como navegadores, bases de datos, frameworks, etc.

Por ejemplo, una prueba para que verifica que los usuarios se pueden registrar correctamente sería una prueba de integración.

TDD (Test Driven Development) y BDD (Behaviour Driven Development)

TDD es un proceso para escribir pruebas automatizadas en el que primero se escribe una prueba fallida, después se implementa el código para que funcione y, por último, se mejora el código verificando que la prueba siga pasando.

BDD es muy similar pero el lenguaje cambia un poco para que sea entendible tanto por programadores como por personas que tienen mayor conocimiento del negocio.

Librerías más populares

Aunque existen muchas librerías de testing en Ruby, incluso uno podría escribir una, las dos más populares son y .

Minitest

require "minitest/autorun"
require "./calculator"

class CalculatorTest < Minitest::Test
  def test_adds_two_positive_numbers
    calculator = Calculator.new
    assert_equal 5, calculator.add(2, 3)
  end
end

Este ejemplo muestra varios conceptos importantes de testing. El test es el método test_adds_two_positive_numbers.

Un test se compone de uno o más assertions, que son los que realizan las verificaciones sobre el código. En el ejemplo la siguiente línea es un assertion:

assert_equal 5, calculator.add(2, 3)

Este assertion verifica que al llamar el método add de la clase Calculator nos retorne el valor esperado.

RSpec

require "./calculator"

describe Calculator do
  describe "#add" do
    it "adds two positive numbers" do
      calculator = Calculator.new
      expect(calculator.add(2, 3)).to eq(5)
    end
  end
end

Assertions

Los assertions son métodos que nos permiten realizar verificaciones en nuestras pruebas.

El único método que necesitas conocer para hacer assertions es assert. Los demás existen por conveniencia y facilidad para el programador.

assert

El método assert recibe una condición que debe evaluar a true o false y, opcionalmente, un mensaje de error. Veamos algunos ejemplos:

assert true  # pasa
assert false # falla

assert true, “Se esperaba que fuera verdadero”

assert 5 == 5, “Se esperaba que 5 fuera igual a 5”

Cuando la condición retorna true la aserción pasa, de lo contrario falla la prueba.

Todos los demás métodos utilizan el método assert por debajo.

refute

El método refute es el contrario de assert. La prueba falla si la condición retorna true y la aserción pasa si retorna false:

refute true  # falla
refute false # pasa

refute 5 == 5
refute 8 == 5

assert_equal

El método assert_equal recibe el valor esperado, el actual, y opcionalmente un mensaje de error que se imprime cuando la aserción falla:

assert_equal 5, 5

Setup y teardown

Los métodos setup y teardown se utilizan para ejecutar código antes y después de cada prueba:

require “minitest/autorun”
require “calculator”

class CalculatorTest < Minitest::Test
  def setup # ó before
    @calculator = Calculator.new
  end

  def teardown # ó after
    # código
  end

  def test_adds_two_positive_numbers
    assert_equal 5, @calculator.add(2, 3)
  end
end

inició como una gema pero ahora viene incluído en las últimas versiones de Ruby.

es una gema para realizar pruebas automatizadas utilizando BDD:

es una especie de lenguaje escrito en Ruby que se lee de forma más natural para las personas que no son programadoras. A esto se le conoce como un DSL (Domain Specific Language).

es un poco más complicado de configurar que . Para más información de consulta la documentación de la gema.

En este curso nos vamos a concentrar en .

Para conocer todos los métodos que ofrece revisa .

Minitest
RSpec
Minitest
RSpec
RSpec
RSpec
Minitest
RSpec
Minitest
Minitest
la documentación