Implementar controlador Posts con TDD
Clase 12 de 33 • Curso de Creación de APIs con Ruby on Rails
Contenido del curso
Proyecto
- 3

Creación de APIs con Rails: Proyecto Blog API paso a paso
04:37 min - 4

Configuración de Gemas para Pruebas en Proyectos Rails
06:26 min - 5

Configuración de Gemas en Proyectos Rails: Arspec, Factory Bot y Database Cleaner
07:25 min - 6

Implementación de un Health Check Endpoint en API con RSpec
12:28 min - 7

Diseño de Casos de Uso y Diagramas de Entidad para Aplicaciones
03:16 min - 8

Diagrama entidad relación: usuario y post
01:41 min - 9

Modelado de Aplicaciones con TDD en Rails
05:59 min - 10

Validaciones y Pruebas TDD en Rails: Modelos USR y Post
07:07 min - 11

Implementación de Endpoints para Listar y Mostrar Posts con TDD
15:12 min - 12

Implementar controlador Posts con TDD
Viendo ahora - 13

Pruebas TDD para crear y actualizar posts
10:12 min - 14

Implementación de Métodos y Manejo de Excepciones en Rails API
10:23 min - 15

Active Model serializers: control total de JSON en Rails
06:03 min - 16

Búsqueda y Filtrado de Posts por Título con TDD
05:57 min - 17

Implementación de Búsqueda de Posts con Servicios en Rails
06:06 min - 18

Problema N+1 en Rails: Detección y Solución Eficaz
04:40 min - 19

Identificación y solución del problema N+1 en Rails
06:20 min - 20

Flujo de Autenticación en APIs con Tokens y Proveedores
05:29 min - 21

Tests con RSpec para autenticación de tokens
12:17 min - 22

Autenticación con Tokens: Implementación en Rails API
05:53 min - 23

Autenticación de Usuarios en Controladores Rails
09:19 min - 24

Autenticación y Seguridad en CRUD de Posts en Rails
09:17 min - 25

Pruebas de Creación y Actualización con Autenticación en Rails
14:21 min - 26

Probando API Ruby on Rails con Postman
10:43 min - 27

Caching en Aplicaciones Web: Funciones y Niveles
07:15 min - 28

Aceleración de Búsquedas en Rails con Caching
08:23 min - 29

Background Jobs en Rails: Conceptos y Funcionalidades
05:45 min - 30

Procesamiento en Background y Envío de Correos con Rails
09:45 min - 31

Envío de Correos en Rails con ActionMailer y Background Jobs
11:06 min - 32
Autenticación y Autorización con JWT y Auth0 en Aplicaciones Web
03:48 min
Cierre
Crear un backend limpio en Rails es más simple cuando aplicas TDD, defines un controlador de posts claro y verificas tus rutas con precisión. Aquí verás cómo implementar index y show, filtrar publicados, usar resources y depurar con by book para hacer que las pruebas pasen.
¿Cómo implementar el controller de posts con index y show?
Para comenzar, se crea un archivo de controller llamado “Post Controller” y una clase con el mismo nombre en CamelCase que hereda de ApplicationController. Se definen dos métodos por convención: index para listar y show para el detalle.
¿Cómo filtrar publicados y renderizar JSON con status ok?
- Usar una consulta para traer solo los publicados.
- Renderizar la respuesta como JSON y enviar status ok.
class PostsController < ApplicationController
def index
posts = Post.where(published: true)
render json: posts, status: :ok
end
def show
post = Post.find(params[:id])
render json: post, status: :ok
end
end
¿Qué convención seguir para index y show?
- index: recibe un GET al endpoint /posts.
- show: recibe un GET al endpoint /posts/:id con el ID en la URL.
- Usar
findconparams[:id]para cargar el recurso.
¿Qué rutas y comandos validan los endpoints?
La definición de rutas con el método utilitario resources permite configurar el CRUD. Aquí se limita a los métodos necesarios.
¿Cómo definir resources para CRUD parcial?
- Declarar el recurso y restringir a index y show.
# config/routes.rb
Rails.application.routes.draw do
resources :posts, only: [:index, :show]
end
¿Cómo verificar con rails routes y filtrar con grep?
- Ejecutar el comando para listar rutas.
rails routes
- Filtrar solo lo relevante con grep en sistemas tipo Unix.
rails routes | grep posts
- En Windows, usar un emulador tipo MinGW o la compatibilidad con Linux en versiones recientes.
¿Qué corrección hacer de /post a /posts en pruebas?
- Si las pruebas fallan por ruta, revisar el plural: /posts en lugar de /post.
- Actualizar las descripciones y los GET en los tests para que apunten a /posts.
¿Cómo depurar y hacer pasar las pruebas con TDD?
Al correr bundle exec rspec, se detectaron fallos por orden de ejecución y por una clave incorrecta en el render de show. La depuración con by book ayuda a inspeccionar variables y flujo.
¿Qué diferencia hay entre let y let! con lazy evaluation?
let: evaluación perezosa (lazy). Solo se ejecuta cuando se usa la variable.let!: evaluación ansiosa (eager). Se ejecuta antes de cada ejemplo.- Solución aplicada: usar
let!para crear los registros antes del request y mover elgetdentro del ejemplo para asegurar el orden correcto.
let!(:posts) { create_list(:post, 10, published: true) }
it 'lista posts publicados' do
get '/posts'
expect(JSON.parse(response.body).size).to eq(10)
end
¿Cómo usar by book para pausar y revisar variables?
- Agregar un punto de quiebre con by book en la prueba o en el controller.
- Revisar el contenido de variables como
postsy el estado de la base de datos. - Confirmar que los objetos existen antes del request.
¿Qué error típico corrige el show al renderizar el recurso?
- Se detectó que se estaba usando la clave equivocada al hacer
renderen show. - Ajuste: renderizar el post correcto como JSON con status ok, haciendo coincidir la clave con el objeto esperado por la prueba.
¿Te quedaron dudas sobre resources, let! o el flujo de TDD? Comenta qué parte quieres profundizar y qué otros endpoints te gustaría cubrir.