Ruby on Rails & TDD con RSpec
Transcript of Ruby on Rails & TDD con RSpec
![Page 1: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/1.jpg)
Ruby on Rails + TDD (con Rspec)
Javier CuevasTraity Weekend of Code
18/04/2015sábado, 18 de abril de 15
![Page 2: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/2.jpg)
About me:Javier Cuevas@javier_dev
Ruby on Rails Shop P2P Marketplace for Dog Owners
sábado, 18 de abril de 15
![Page 3: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/3.jpg)
Ruby Rails
sábado, 18 de abril de 15
![Page 4: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/4.jpg)
• Lenguaje de programación interpretado.
Ruby Rails
sábado, 18 de abril de 15
![Page 5: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/5.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
Ruby Rails
sábado, 18 de abril de 15
![Page 6: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/6.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
Ruby Rails
sábado, 18 de abril de 15
![Page 7: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/7.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
Ruby Rails
sábado, 18 de abril de 15
![Page 8: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/8.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de paquetes (gemas)
Ruby Rails
sábado, 18 de abril de 15
![Page 9: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/9.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de paquetes (gemas)
• “to enjoy programming, and to be happy”
Ruby Rails
sábado, 18 de abril de 15
![Page 10: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/10.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de paquetes (gemas)
• “to enjoy programming, and to be happy”
• Framework MVC para Ruby
Ruby Rails
sábado, 18 de abril de 15
![Page 11: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/11.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de paquetes (gemas)
• “to enjoy programming, and to be happy”
• Framework MVC para Ruby
• Incluye ORM (mapeador modelos - tablas)
Ruby Rails
sábado, 18 de abril de 15
![Page 12: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/12.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de paquetes (gemas)
• “to enjoy programming, and to be happy”
• Framework MVC para Ruby
• Incluye ORM (mapeador modelos - tablas)
• Open Source. Creado en 2004.
Ruby Rails
sábado, 18 de abril de 15
![Page 13: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/13.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de paquetes (gemas)
• “to enjoy programming, and to be happy”
• Framework MVC para Ruby
• Incluye ORM (mapeador modelos - tablas)
• Open Source. Creado en 2004.
• “Convention over configuration”
Ruby Rails
sábado, 18 de abril de 15
![Page 14: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/14.jpg)
• Lenguaje de programación interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de paquetes (gemas)
• “to enjoy programming, and to be happy”
• Framework MVC para Ruby
• Incluye ORM (mapeador modelos - tablas)
• Open Source. Creado en 2004.
• “Convention over configuration”
• “Dont Repeat Yourself”
Ruby Rails
sábado, 18 de abril de 15
![Page 15: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/15.jpg)
Algunas cosas raras de
Ruby
sábado, 18 de abril de 15
![Page 16: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/16.jpg)
No hay corchetes { } ni en ifs ni en métodos
def make_positive(number) if number < 0 -number else number endend
Return implícito
sábado, 18 de abril de 15
![Page 17: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/17.jpg)
if y unless al final de línea
puts 'es par' if number.even?
puts 'es par' unless number.odd?
sábado, 18 de abril de 15
![Page 18: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/18.jpg)
Llamadas a métodos sin paréntesis
results = method_name param1, param2 results = method_name(param1, param2)
results = method_name(param1, param2).another_method
sábado, 18 de abril de 15
![Page 19: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/19.jpg)
Símbolos• :my_symbol
• NO son variables. NO son constantes.
• Podemos verlos como etiquetas.
• Fundamentalmente los usamos como índices en arrays asociativos (Hashes).
• A pesar de todo: también son objetos.
def silly_method(options) puts "Color: " + options[:color] puts "City: " + options[:city]end
silly_method :color => "red", :city => "Madrid"
sábado, 18 de abril de 15
![Page 20: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/20.jpg)
Blocks• Un Block es un “trozo de código”
• Podemos pasarlos como parámetro a un métodosome_numbers = [1,2,3,4,5]
some_numbers.each { |number| puts number }# es equivalente a ...some_numbers.each do |number| puts numberend
sábado, 18 de abril de 15
![Page 21: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/21.jpg)
Model
View
Controller
sábado, 18 de abril de 15
![Page 22: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/22.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 23: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/23.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 24: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/24.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 25: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/25.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 26: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/26.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 27: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/27.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 28: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/28.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 29: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/29.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 30: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/30.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 31: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/31.jpg)
WebServer
Controller
Model
View
sábado, 18 de abril de 15
![Page 32: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/32.jpg)
WebServer Controller
Model
View
ActiveRecord
Routes
Helpers
MVC en Rails
sábado, 18 de abril de 15
![Page 33: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/33.jpg)
WebServer Controller
Model
View
ActiveRecord
Routes
Helpers
MVC en Rails
Buena práctica:
Mantén los Controladores con el menor número de lineas de código.Mueve toda la lógica de tu aplicación al Modelo.
sábado, 18 de abril de 15
![Page 34: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/34.jpg)
Modelclass Post < ActiveRecord::Base # Relationships has_many :comments # Validations validates :title, :presence => true validates :content, :presence => true # Class methods def self.all_posts_by_diacode # ... end # Instance methods def is_recent? # ... end end
No es necesario especificar los atributos del objeto en la clase.Rails buscará directamente en la BBDD
sábado, 18 de abril de 15
![Page 35: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/35.jpg)
Controllerclass PostsController < ApplicationController def index @posts = Post.all respond_to do |format| format.html format.js { render json: @posts } end end # More actions...end
sábado, 18 de abril de 15
![Page 36: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/36.jpg)
Controllerclass PostsController < ApplicationController def index @posts = Post.all respond_to do |format| format.html format.js { render json: @posts } end end # More actions...end
Respuesta para peticiones html. Al no especificar nada renderizará automaticamente la vista index.html.erb
sábado, 18 de abril de 15
![Page 37: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/37.jpg)
View
<html> <head> <title>Awesome Rails App</title> </head> <body> <div id="header"> <%= yield :header %> <div> <div id="content"> <%= yield %> </div> </body></html>
<% content_for :header do %> <h1>Post List</h1><% end %>
<p>This is the content!</p><ul> <% @posts.each do |post| %> <li><%= @post.title %></li> <% end %></ul>
Layout View
Ruby ERB<% Ruby code -- inline with output %>
<%= Ruby expression -- replace with result %><%# comment -- ignored -- useful in testing %>
sábado, 18 de abril de 15
![Page 38: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/38.jpg)
Relaciones entre Modelos
http://bit.ly/15HtEh
sábado, 18 de abril de 15
![Page 39: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/39.jpg)
1 a 1
sábado, 18 de abril de 15
![Page 40: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/40.jpg)
1 a 1 con modelo intermedio
1 supplier tiene 1 account
1 supplier tiene 1 account_history a través su account
1 account pertenece a 1 supplier
1 account_history pertenece a 1 supplier
sábado, 18 de abril de 15
![Page 41: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/41.jpg)
1 a N
sábado, 18 de abril de 15
![Page 42: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/42.jpg)
N a N
3 tablas en la BBDD, pero solo 2 modelos en Rails!
sábado, 18 de abril de 15
![Page 43: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/43.jpg)
N a N con modelo intermedio
3 tablas en la BBDD y 3 modelos
sábado, 18 de abril de 15
![Page 44: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/44.jpg)
MigracionesCrear y modificar la BBDD
sábado, 18 de abril de 15
![Page 45: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/45.jpg)
Migraciones• En Rails todas las modificaciones de la estructura de
la BBDD deben hacerse a traves de migraciones.
• Las migraciones son archivos Ruby almacenados en [app]/db/migrate
• El nombre de archivo de cada migración lleva un timestamp que indica en que orden se ejecutarán.
• Permiten crear tablas, modificar columnas, crear índices, etc.
• Facilitan la colaboración entre programadores.
sábado, 18 de abril de 15
![Page 46: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/46.jpg)
Migraciones
class CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content end endend
Por convenciónel nombre de las tablas es siempre en plural
sábado, 18 de abril de 15
![Page 47: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/47.jpg)
Migraciones
class CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content end endend
Por convenciónel nombre de las tablas es siempre en plural
sábado, 18 de abril de 15
![Page 48: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/48.jpg)
• Crear migraciónrails generate migration CreatePosts
• Ejecutar migraciónrake db:migrate
• Deshacer cambios de la última migraciónrake db:rollback
Migraciones
Rake permite ejecutar tareas.Hay algunas ya definidas como db:migrate, pero podemos crear tareas rake propias
sábado, 18 de abril de 15
![Page 49: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/49.jpg)
TDDTest Driven Development
sábado, 18 de abril de 15
![Page 50: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/50.jpg)
Wait, ¿qué es un “test”?
• En el contexto del TDD un test:
• Es un script que realiza una serie de acciones para validar que otro script, tiene un resultado esperado en unas condiciones determinadas.
• (Normalmente) Es escrito en el mismo lenguaje en el que estamos trabajando.
• En el contexto del TDD un test NO ES:
• Probar “a mano” tu aplicación.
sábado, 18 de abril de 15
![Page 51: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/51.jpg)
¿Qué es el TDD?• Es una metodología de desarrollo consistente
en la repetición del siguiente ciclo:
1. Escribimos un test. El test falla (ya que no hay código para hacerlo pasar).
2. Escribimos el código mínimo para hacer que el test “pase” (su resultado sea positivo).
3. Refactorizamos el código necesario.
[Volvemos al paso 1]
sábado, 18 de abril de 15
![Page 52: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/52.jpg)
TDD en Rails
Para hacer TDD lo normal es apoyarse en una librería de testing. Rails por defecto viene con minitest, pero la mayoría de la comunidad utiliza RSpec.En RSpec a los tests se les llama specs.
sábado, 18 de abril de 15
![Page 53: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/53.jpg)
MINI DEMO
sábado, 18 de abril de 15
![Page 54: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/54.jpg)
Tipos de tests
El vocabulario en torno al TDD a menudo es confuso ya que existen muchas formas de categorizar los tests (o specs). A continuación os cuento como nosotros (y gran parte de la comunidad) clasifica y define sus tests
sábado, 18 de abril de 15
![Page 55: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/55.jpg)
Tipos de testsFeature specs
• Testean una funcionalidad de nuestra app desde la perspectiva del usuario.
• Utilizan un navegador automatizado para simular el comportamiento del usuario.
• Son muy útiles porque tocan muchas partes de nuestra app (vistas, controladores, rutas, modelos, etc).
• A cambio son los más lentos de ejecutar.
• También conocidos como: tests de aceptación o integración
sábado, 18 de abril de 15
![Page 56: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/56.jpg)
Tipos de testsFeature specs
Source http://bit.ly/1OqctU8
sábado, 18 de abril de 15
![Page 57: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/57.jpg)
Tipos de testsModel specs
• Testean nuestros modelos (donde debería estar la lógica de negocio).
• Incluyen tanto tests de métodos de instancia (sobre un objecto de nuestra clase), como métodos de clase (por ejemplo consultas a la base de datos).
• Son bastante rápidos a la hora de ejecutarlos.
• También conocidos como: tests unitarios (unit tests).
sábado, 18 de abril de 15
![Page 58: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/58.jpg)
Tipos de testsModel specs
Source http://bit.ly/1OqctU8
sábado, 18 de abril de 15
![Page 59: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/59.jpg)
Tipos de testsController specs
• Testean nuestros controladores• Si los controladores son muy simples,
podemos omitirlos (con los feature specs estaríamos cubiertos)
• En cambio, si nuestra app es una API que devuelve JSON o XML, son múy útiles.
sábado, 18 de abril de 15
![Page 60: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/60.jpg)
Tipos de testsController specs
Source http://bit.ly/1OqctU8
sábado, 18 de abril de 15
![Page 61: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/61.jpg)
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
![Page 62: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/62.jpg)
Feature specs
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
![Page 63: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/63.jpg)
Feature specs
Model specs
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
![Page 64: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/64.jpg)
Feature specs
Model specs
Controller specs
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
![Page 65: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/65.jpg)
¿Por donde empiezo?• Dos maneras de hacer TDD:
• Top-down (aka outside-in):
• Empezamos por el mayor nivel de abtracción (lo que ve el usuario):
• Features -> Controllers -> Models
• Bottom-up
• Empezamos por el código de bajo nivel
• Models -> Controllers -> Featuressábado, 18 de abril de 15
![Page 66: Ruby on Rails & TDD con RSpec](https://reader031.fdocuments.in/reader031/viewer/2022032217/55a8562a1a28ab762d8b45e8/html5/thumbnails/66.jpg)
¡Gracias!¿Preguntas?
sábado, 18 de abril de 15