SlideShare a Scribd company logo
1 of 66
Download to read offline
Ruby on Rails + TDD
(con Rspec)
Javier Cuevas
Traity Weekend of Code
18/04/2015
sábado, 18 de abril de 15
About me:
Javier Cuevas
@javier_dev
Ruby on Rails Shop P2P Marketplace for Dog Owners
sábado, 18 de abril de 15
Ruby Rails
sábado, 18 de abril de 15
• Lenguaje de programación
interpretado.
Ruby Rails
sábado, 18 de abril de 15
• Lenguaje de programación
interpretado.
• Todo son objetos
Ruby Rails
sábado, 18 de abril de 15
• Lenguaje de programación
interpretado.
• Todo son objetos
• Tipado dinámico
Ruby Rails
sábado, 18 de abril de 15
• Lenguaje de programación
interpretado.
• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
Ruby Rails
sábado, 18 de abril de 15
• 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
• 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
• 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
• 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
• 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
• 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
• 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 RepeatYourself”
Ruby Rails
sábado, 18 de abril de 15
Algunas cosas
raras de
Ruby
sábado, 18 de abril de 15
No hay corchetes { } ni en
ifs ni en métodos
def make_positive(number)
if number < 0
-number
else
number
end
end
Return implícito
sábado, 18 de abril de 15
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
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
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
Blocks
• Un Block es un “trozo de código”
• Podemos pasarlos como parámetro a un método
some_numbers = [1,2,3,4,5]
some_numbers.each { |number| puts number }
# es equivalente a ...
some_numbers.each do |number|
puts number
end
sábado, 18 de abril de 15
Model
View
Controller
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server
Controller
Model
View
sábado, 18 de abril de 15
Web
Server Controller
Model
View
ActiveRecord
Routes
Helpers
MVC en Rails
sábado, 18 de abril de 15
Web
Server 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
Model
class 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
Controller
class 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
Controller
class 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
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
Relaciones
entre Modelos
http://bit.ly/15HtEh
sábado, 18 de abril de 15
1 a 1
sábado, 18 de abril de 15
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
1 a N
sábado, 18 de abril de 15
N a N
3 tablas en
la BBDD,
pero solo 2
modelos en
Rails!
sábado, 18 de abril de 15
N a N
con modelo intermedio
3 tablas en
la BBDD y
3 modelos
sábado, 18 de abril de 15
Migraciones
Crear y modificar la BBDD
sábado, 18 de abril de 15
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
Migraciones
class CreatePost < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.text :content
end
end
end
Por convención
el nombre de las
tablas es siempre
en plural
sábado, 18 de abril de 15
Migraciones
class CreatePost < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.text :content
end
end
end
Por convención
el nombre de las
tablas es siempre
en plural
sábado, 18 de abril de 15
•Crear migración
rails generate migration CreatePosts
•Ejecutar migración
rake db:migrate
•Deshacer cambios de la última migración
rake 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
TDD
Test Driven Development
sábado, 18 de abril de 15
Wait, ¿qué es un “test”?
• En el contexto delTDD 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 delTDD un test NO ES:
• Probar “a mano” tu aplicación.
sábado, 18 de abril de 15
¿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
TDD en Rails
Para hacerTDD 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
MINI DEMO
sábado, 18 de abril de 15
Tipos de tests
El vocabulario en torno alTDD 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
Tipos de tests
Feature 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
Tipos de tests
Feature specs
Source http://bit.ly/1OqctU8
sábado, 18 de abril de 15
Tipos de tests
Model 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
Tipos de tests
Model specs
Source http://bit.ly/1OqctU8
sábado, 18 de abril de 15
Tipos de tests
Controller 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
Tipos de tests
Controller specs
Source http://bit.ly/1OqctU8
sábado, 18 de abril de 15
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
Feature specs
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
Feature specs
Model specs
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
Feature specs
Model specs
Controller specs
TDD y MVC
Controller
Model
View
sábado, 18 de abril de 15
¿Por donde empiezo?
• Dos maneras de hacerTDD:
• 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 -> Features
sábado, 18 de abril de 15
¡Gracias!
¿Preguntas?
sábado, 18 de abril de 15

More Related Content

What's hot

Industrialised Building Solution
Industrialised Building SolutionIndustrialised Building Solution
Industrialised Building SolutionLee Wan Xuan
 
Design of multistorey building
Design of multistorey buildingDesign of multistorey building
Design of multistorey buildingSivaji Djpk
 
BSC ARC (Sem 2) : Culture & History 2 - Report
BSC ARC (Sem 2) : Culture & History 2 - ReportBSC ARC (Sem 2) : Culture & History 2 - Report
BSC ARC (Sem 2) : Culture & History 2 - Reporthaeykceb
 
Design of Amphibious Homes
Design of Amphibious HomesDesign of Amphibious Homes
Design of Amphibious Homesvivatechijri
 
Mivan Construction Techinique
Mivan Construction TechiniqueMivan Construction Techinique
Mivan Construction TechiniqueASHISH singh
 
B.tech Project 1 - Industrialised Building Systems
B.tech Project 1 - Industrialised Building SystemsB.tech Project 1 - Industrialised Building Systems
B.tech Project 1 - Industrialised Building SystemsCarmen Chan
 
Seminar on amphibious house ppt
Seminar on amphibious house pptSeminar on amphibious house ppt
Seminar on amphibious house pptIndrajit Patra
 
high rise building construction
high rise building constructionhigh rise building construction
high rise building constructionAditya Sanyal
 
Building Structure Roof Truss
Building Structure Roof Truss Building Structure Roof Truss
Building Structure Roof Truss Lovie Tey
 
Design of Multi-storey car parking
Design of Multi-storey car parkingDesign of Multi-storey car parking
Design of Multi-storey car parkingManoj Navneeth
 
Precast Concrete Steps Construction Tutorial by Armtec Ltd.
Precast Concrete Steps Construction Tutorial by Armtec Ltd.Precast Concrete Steps Construction Tutorial by Armtec Ltd.
Precast Concrete Steps Construction Tutorial by Armtec Ltd.Communications Branding
 
Pavillion slides
Pavillion slidesPavillion slides
Pavillion slideshongbinng
 
construction of footpath and interlocking.pptx
construction of footpath and interlocking.pptxconstruction of footpath and interlocking.pptx
construction of footpath and interlocking.pptxAnkitRajput216073
 

What's hot (20)

Industrialised Building Solution
Industrialised Building SolutionIndustrialised Building Solution
Industrialised Building Solution
 
Design of multistorey building
Design of multistorey buildingDesign of multistorey building
Design of multistorey building
 
PILE FOUNDATIONS
PILE FOUNDATIONSPILE FOUNDATIONS
PILE FOUNDATIONS
 
BSC ARC (Sem 2) : Culture & History 2 - Report
BSC ARC (Sem 2) : Culture & History 2 - ReportBSC ARC (Sem 2) : Culture & History 2 - Report
BSC ARC (Sem 2) : Culture & History 2 - Report
 
Design of Amphibious Homes
Design of Amphibious HomesDesign of Amphibious Homes
Design of Amphibious Homes
 
Mivan Construction Techinique
Mivan Construction TechiniqueMivan Construction Techinique
Mivan Construction Techinique
 
B.tech Project 1 - Industrialised Building Systems
B.tech Project 1 - Industrialised Building SystemsB.tech Project 1 - Industrialised Building Systems
B.tech Project 1 - Industrialised Building Systems
 
Lintels and Beams
Lintels and BeamsLintels and Beams
Lintels and Beams
 
Ct1 assignment
Ct1 assignmentCt1 assignment
Ct1 assignment
 
Seminar on amphibious house ppt
Seminar on amphibious house pptSeminar on amphibious house ppt
Seminar on amphibious house ppt
 
03 Building Structures - Simplified.pdf
03 Building Structures - Simplified.pdf03 Building Structures - Simplified.pdf
03 Building Structures - Simplified.pdf
 
Formwork
FormworkFormwork
Formwork
 
ACE special structures
ACE special structuresACE special structures
ACE special structures
 
high rise building construction
high rise building constructionhigh rise building construction
high rise building construction
 
Building Structure Roof Truss
Building Structure Roof Truss Building Structure Roof Truss
Building Structure Roof Truss
 
Design of Multi-storey car parking
Design of Multi-storey car parkingDesign of Multi-storey car parking
Design of Multi-storey car parking
 
Precast Concrete Steps Construction Tutorial by Armtec Ltd.
Precast Concrete Steps Construction Tutorial by Armtec Ltd.Precast Concrete Steps Construction Tutorial by Armtec Ltd.
Precast Concrete Steps Construction Tutorial by Armtec Ltd.
 
Pavillion slides
Pavillion slidesPavillion slides
Pavillion slides
 
construction of footpath and interlocking.pptx
construction of footpath and interlocking.pptxconstruction of footpath and interlocking.pptx
construction of footpath and interlocking.pptx
 
Precast concrete structures
Precast concrete structuresPrecast concrete structures
Precast concrete structures
 

Viewers also liked

Phoenix for Rails Devs
Phoenix for Rails DevsPhoenix for Rails Devs
Phoenix for Rails DevsDiacode
 
Metodologia upen up
Metodologia upen upMetodologia upen up
Metodologia upen upunimag
 
Virtual Contact Center Technical Support - What Happens Post Deployment
Virtual Contact Center Technical Support - What Happens Post DeploymentVirtual Contact Center Technical Support - What Happens Post Deployment
Virtual Contact Center Technical Support - What Happens Post DeploymentSteve Chirokas
 
Documento scannable el 25 01-2016 1 07-27
Documento scannable el 25 01-2016 1 07-27Documento scannable el 25 01-2016 1 07-27
Documento scannable el 25 01-2016 1 07-27tabata0911
 
Asesoria Nertóbriga
Asesoria NertóbrigaAsesoria Nertóbriga
Asesoria Nertóbrigaricla1980
 
Procesamiento de listas abril 2012
Procesamiento de listas abril 2012Procesamiento de listas abril 2012
Procesamiento de listas abril 2012Juan Manuel Aparicio
 
Socialsurf 2012 company profile ita
Socialsurf 2012 company profile itaSocialsurf 2012 company profile ita
Socialsurf 2012 company profile itamanuelaronghi
 
Hacia una estrategia_nacional_para_el_desarrollo_sostenible
Hacia una estrategia_nacional_para_el_desarrollo_sostenibleHacia una estrategia_nacional_para_el_desarrollo_sostenible
Hacia una estrategia_nacional_para_el_desarrollo_sostenibleJaime-Sequera
 
Agile rhein main agility path versus SAFe
Agile rhein main agility path versus SAFeAgile rhein main agility path versus SAFe
Agile rhein main agility path versus SAFeKurt Jäger
 
La economía agrícola como ciencia social aplicada.
La economía agrícola como ciencia social aplicada.La economía agrícola como ciencia social aplicada.
La economía agrícola como ciencia social aplicada.Perla Jimenez
 
2. requerimientos de la aduana (cpb custom & border protection) de estados ...
2. requerimientos de la aduana (cpb   custom & border protection) de estados ...2. requerimientos de la aduana (cpb   custom & border protection) de estados ...
2. requerimientos de la aduana (cpb custom & border protection) de estados ...ProColombia
 
La sombra sobre innsmouth
La sombra sobre innsmouthLa sombra sobre innsmouth
La sombra sobre innsmouthVicZG93
 
Ivabradina: Fundamentos y Evidencia de su Utilidad Clínica
Ivabradina: Fundamentos y Evidencia de su Utilidad ClínicaIvabradina: Fundamentos y Evidencia de su Utilidad Clínica
Ivabradina: Fundamentos y Evidencia de su Utilidad ClínicaErnest Spitzer
 

Viewers also liked (20)

Phoenix for Rails Devs
Phoenix for Rails DevsPhoenix for Rails Devs
Phoenix for Rails Devs
 
Metodologia upen up
Metodologia upen upMetodologia upen up
Metodologia upen up
 
Virtual Contact Center Technical Support - What Happens Post Deployment
Virtual Contact Center Technical Support - What Happens Post DeploymentVirtual Contact Center Technical Support - What Happens Post Deployment
Virtual Contact Center Technical Support - What Happens Post Deployment
 
El Celrè 81
El Celrè 81El Celrè 81
El Celrè 81
 
Documento scannable el 25 01-2016 1 07-27
Documento scannable el 25 01-2016 1 07-27Documento scannable el 25 01-2016 1 07-27
Documento scannable el 25 01-2016 1 07-27
 
Asesoria Nertóbriga
Asesoria NertóbrigaAsesoria Nertóbriga
Asesoria Nertóbriga
 
Procesamiento de listas abril 2012
Procesamiento de listas abril 2012Procesamiento de listas abril 2012
Procesamiento de listas abril 2012
 
Amigo Kit + Amigo Plus
Amigo Kit + Amigo PlusAmigo Kit + Amigo Plus
Amigo Kit + Amigo Plus
 
03 la maduración del ser humano
03 la maduración del ser humano03 la maduración del ser humano
03 la maduración del ser humano
 
Socialsurf 2012 company profile ita
Socialsurf 2012 company profile itaSocialsurf 2012 company profile ita
Socialsurf 2012 company profile ita
 
Analítica Web: Medir para ganar en Internet
Analítica Web: Medir para ganar en InternetAnalítica Web: Medir para ganar en Internet
Analítica Web: Medir para ganar en Internet
 
1 txa007101g0701 ct2
1 txa007101g0701 ct21 txa007101g0701 ct2
1 txa007101g0701 ct2
 
Hacia una estrategia_nacional_para_el_desarrollo_sostenible
Hacia una estrategia_nacional_para_el_desarrollo_sostenibleHacia una estrategia_nacional_para_el_desarrollo_sostenible
Hacia una estrategia_nacional_para_el_desarrollo_sostenible
 
Agile rhein main agility path versus SAFe
Agile rhein main agility path versus SAFeAgile rhein main agility path versus SAFe
Agile rhein main agility path versus SAFe
 
Ft razon[10]
Ft razon[10]Ft razon[10]
Ft razon[10]
 
Volando volando, aprendemos jugando
Volando volando, aprendemos jugandoVolando volando, aprendemos jugando
Volando volando, aprendemos jugando
 
La economía agrícola como ciencia social aplicada.
La economía agrícola como ciencia social aplicada.La economía agrícola como ciencia social aplicada.
La economía agrícola como ciencia social aplicada.
 
2. requerimientos de la aduana (cpb custom & border protection) de estados ...
2. requerimientos de la aduana (cpb   custom & border protection) de estados ...2. requerimientos de la aduana (cpb   custom & border protection) de estados ...
2. requerimientos de la aduana (cpb custom & border protection) de estados ...
 
La sombra sobre innsmouth
La sombra sobre innsmouthLa sombra sobre innsmouth
La sombra sobre innsmouth
 
Ivabradina: Fundamentos y Evidencia de su Utilidad Clínica
Ivabradina: Fundamentos y Evidencia de su Utilidad ClínicaIvabradina: Fundamentos y Evidencia de su Utilidad Clínica
Ivabradina: Fundamentos y Evidencia de su Utilidad Clínica
 

Similar to Ruby on Rails & TDD con RSpec

Taller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on RailsTaller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on RailsDiacode
 
Alternativas a Rails para sitios y servicios web ultraligeros
Alternativas a Rails para sitios y  servicios web ultraligerosAlternativas a Rails para sitios y  servicios web ultraligeros
Alternativas a Rails para sitios y servicios web ultraligeroshappywebcoder
 
5 tips para programar en Ruby On Rails
5 tips para programar en Ruby On Rails 5 tips para programar en Ruby On Rails
5 tips para programar en Ruby On Rails kyaalena
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Rafael Franco
 
Groopify para groopies
Groopify para groopiesGroopify para groopies
Groopify para groopiesGroopify
 
Presentación Ruby on Rails
Presentación Ruby on RailsPresentación Ruby on Rails
Presentación Ruby on RailsGiannis Morales
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRailsPablo Marrero
 
Sesión 03: Ruby y SAP
Sesión 03: Ruby y SAPSesión 03: Ruby y SAP
Sesión 03: Ruby y SAPBiz Partner
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPAlvaro Tejada
 
Meetup training Taller RoR
Meetup training Taller RoR Meetup training Taller RoR
Meetup training Taller RoR cdechauri
 
Taller Redis
Taller RedisTaller Redis
Taller Redisbetabeers
 
9 razones para programar en Ruby On Rails
9 razones para programar en Ruby On Rails 9 razones para programar en Ruby On Rails
9 razones para programar en Ruby On Rails kyaalena
 
SpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con GrailsSpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con GrailsDomingo Suarez Torres
 
Taller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con RubyTaller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con RubyTestingUy
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Nelson Rojas Núñez
 
ASP.NET 5 & Tag Helpers
ASP.NET 5 & Tag HelpersASP.NET 5 & Tag Helpers
ASP.NET 5 & Tag HelpersMarc Rubiño
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on RailsDiego Algorta
 

Similar to Ruby on Rails & TDD con RSpec (20)

Taller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on RailsTaller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on Rails
 
Descifrando Ruby on Rails
Descifrando Ruby on RailsDescifrando Ruby on Rails
Descifrando Ruby on Rails
 
Alternativas a Rails para sitios y servicios web ultraligeros
Alternativas a Rails para sitios y  servicios web ultraligerosAlternativas a Rails para sitios y  servicios web ultraligeros
Alternativas a Rails para sitios y servicios web ultraligeros
 
Rails 101
Rails 101Rails 101
Rails 101
 
5 tips para programar en Ruby On Rails
5 tips para programar en Ruby On Rails 5 tips para programar en Ruby On Rails
5 tips para programar en Ruby On Rails
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011
 
Groopify para groopies
Groopify para groopiesGroopify para groopies
Groopify para groopies
 
Presentación Ruby on Rails
Presentación Ruby on RailsPresentación Ruby on Rails
Presentación Ruby on Rails
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRails
 
Sesión 03: Ruby y SAP
Sesión 03: Ruby y SAPSesión 03: Ruby y SAP
Sesión 03: Ruby y SAP
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
 
Meetup training Taller RoR
Meetup training Taller RoR Meetup training Taller RoR
Meetup training Taller RoR
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
9 razones para programar en Ruby On Rails
9 razones para programar en Ruby On Rails 9 razones para programar en Ruby On Rails
9 razones para programar en Ruby On Rails
 
SpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con GrailsSpringIO 2012 Madrid-Escalabilidad con Grails
SpringIO 2012 Madrid-Escalabilidad con Grails
 
Contribuir a Rails
Contribuir a RailsContribuir a Rails
Contribuir a Rails
 
Taller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con RubyTaller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con Ruby
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
ASP.NET 5 & Tag Helpers
ASP.NET 5 & Tag HelpersASP.NET 5 & Tag Helpers
ASP.NET 5 & Tag Helpers
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Rails
 

More from Diacode

CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)Diacode
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to ElixirDiacode
 
Startup nomads
Startup nomadsStartup nomads
Startup nomadsDiacode
 
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)Diacode
 
TLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers MadridTLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers MadridDiacode
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoDiacode
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoDiacode
 
Presentación de Kogi
Presentación de KogiPresentación de Kogi
Presentación de KogiDiacode
 
Educación: The Next Big Thing
Educación: The Next Big ThingEducación: The Next Big Thing
Educación: The Next Big ThingDiacode
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewDiacode
 
Taller de Introducción a Ruby on Rails (2ª parte)
Taller de Introducción a Ruby on Rails (2ª parte)Taller de Introducción a Ruby on Rails (2ª parte)
Taller de Introducción a Ruby on Rails (2ª parte)Diacode
 

More from Diacode (11)

CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to Elixir
 
Startup nomads
Startup nomadsStartup nomads
Startup nomads
 
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
 
TLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers MadridTLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers Madrid
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
 
Presentación de Kogi
Presentación de KogiPresentación de Kogi
Presentación de Kogi
 
Educación: The Next Big Thing
Educación: The Next Big ThingEducación: The Next Big Thing
Educación: The Next Big Thing
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overview
 
Taller de Introducción a Ruby on Rails (2ª parte)
Taller de Introducción a Ruby on Rails (2ª parte)Taller de Introducción a Ruby on Rails (2ª parte)
Taller de Introducción a Ruby on Rails (2ª parte)
 

Recently uploaded

SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxRAMIROANTONIOGALINDO
 
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosBBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosNeo4j
 
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Neo4j
 
Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfAnaRosaMontenegro
 
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...Neo4j
 
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...FabianCruz73
 
Tipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógicoTipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógicoMaxCaldern2
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptxmaykolmagallanes012
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOELIAMARYTOVARFLOREZD
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.CZSOTEC
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 

Recently uploaded (11)

SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptx
 
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosBBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
 
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
 
Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdf
 
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
 
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
 
Tipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógicoTipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógico
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptx
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 

Ruby on Rails & TDD con RSpec

  • 1. Ruby on Rails + TDD (con Rspec) Javier Cuevas Traity Weekend of Code 18/04/2015 sábado, 18 de abril de 15
  • 2. About me: Javier Cuevas @javier_dev Ruby on Rails Shop P2P Marketplace for Dog Owners sábado, 18 de abril de 15
  • 3. Ruby Rails sábado, 18 de abril de 15
  • 4. • Lenguaje de programación interpretado. Ruby Rails sábado, 18 de abril de 15
  • 5. • Lenguaje de programación interpretado. • Todo son objetos Ruby Rails sábado, 18 de abril de 15
  • 6. • Lenguaje de programación interpretado. • Todo son objetos • Tipado dinámico Ruby Rails sábado, 18 de abril de 15
  • 7. • Lenguaje de programación interpretado. • Todo son objetos • Tipado dinámico • Sintaxis limpia e intuitiva Ruby Rails sábado, 18 de abril de 15
  • 8. • 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
  • 9. • 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
  • 10. • 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
  • 11. • 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
  • 12. • 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
  • 13. • 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
  • 14. • 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 RepeatYourself” Ruby Rails sábado, 18 de abril de 15
  • 16. No hay corchetes { } ni en ifs ni en métodos def make_positive(number) if number < 0 -number else number end end Return implícito sábado, 18 de abril de 15
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. Blocks • Un Block es un “trozo de código” • Podemos pasarlos como parámetro a un método some_numbers = [1,2,3,4,5] some_numbers.each { |number| puts number } # es equivalente a ... some_numbers.each do |number| puts number end sábado, 18 de abril de 15
  • 33. Web Server 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
  • 34. Model class 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
  • 35. Controller class 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
  • 36. Controller class 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
  • 37. 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
  • 39. 1 a 1 sábado, 18 de abril de 15
  • 40. 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
  • 41. 1 a N sábado, 18 de abril de 15
  • 42. N a N 3 tablas en la BBDD, pero solo 2 modelos en Rails! sábado, 18 de abril de 15
  • 43. N a N con modelo intermedio 3 tablas en la BBDD y 3 modelos sábado, 18 de abril de 15
  • 44. Migraciones Crear y modificar la BBDD sábado, 18 de abril de 15
  • 45. 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
  • 46. Migraciones class CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content end end end Por convención el nombre de las tablas es siempre en plural sábado, 18 de abril de 15
  • 47. Migraciones class CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content end end end Por convención el nombre de las tablas es siempre en plural sábado, 18 de abril de 15
  • 48. •Crear migración rails generate migration CreatePosts •Ejecutar migración rake db:migrate •Deshacer cambios de la última migración rake 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
  • 50. Wait, ¿qué es un “test”? • En el contexto delTDD 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 delTDD un test NO ES: • Probar “a mano” tu aplicación. sábado, 18 de abril de 15
  • 51. ¿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
  • 52. TDD en Rails Para hacerTDD 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
  • 53. MINI DEMO sábado, 18 de abril de 15
  • 54. Tipos de tests El vocabulario en torno alTDD 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
  • 55. Tipos de tests Feature 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
  • 56. Tipos de tests Feature specs Source http://bit.ly/1OqctU8 sábado, 18 de abril de 15
  • 57. Tipos de tests Model 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
  • 58. Tipos de tests Model specs Source http://bit.ly/1OqctU8 sábado, 18 de abril de 15
  • 59. Tipos de tests Controller 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
  • 60. Tipos de tests Controller specs Source http://bit.ly/1OqctU8 sábado, 18 de abril de 15
  • 62. Feature specs TDD y MVC Controller Model View sábado, 18 de abril de 15
  • 63. Feature specs Model specs TDD y MVC Controller Model View sábado, 18 de abril de 15
  • 64. Feature specs Model specs Controller specs TDD y MVC Controller Model View sábado, 18 de abril de 15
  • 65. ¿Por donde empiezo? • Dos maneras de hacerTDD: • 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 -> Features sábado, 18 de abril de 15