maquinista 2
maquinista 2
Los accesorios no son divertidos. maquinista es.
- página de inicio
- Grupo de Google, para apoyo
- Rastreador de errores, para informar errores de maquinista
Si quieres Maquinista 1, ve aquí.
Introducción
Nota: Maquinista no está en desarrollo activo. Consulte la sección Estado a continuación para obtener más información.
Machinist facilita la creación de objetos para su uso en pruebas. Genera datos para los atributos que no le interesan y construye los objetos asociados necesarios, lo que le permite especificar solo los campos que le interesan en su prueba. Por ejemplo:
describe Comment, "without_spam scope" do
it "doesn't include spam" do
# This will make a Comment, a Post, and a User (the author of the
# Post), generate values for all their attributes, and save them:
spam = Comment.make!(:spam => true)
Comment.without_spam.should_not include(spam)
end
end
Le dices a Machinist cómo hacer esto con planos:
require 'machinist/active_record'
User.blueprint do
username { "user#{sn}" } # Each user gets a unique serial number.
end
Post.blueprint do
author
title { "Post #{sn}" }
body { "Lorem ipsum..." }
end
Comment.blueprint do
post
email { "commenter#{sn}@example.com" }
body { "Lorem ipsum..." }
end
Instalación
Actualización desde maquinista 1
Ver la wiki.
Rieles 3
En tu aplicación Gemfile
en el group :test
sección, agregue:
gem 'machinist', '>= 2.0.0.beta2'
Entonces corre:
bundle
rails generate machinist:install
Si desea que Machinist agregue automáticamente un plano a su archivo de planos siempre que genere un modelo, agregue lo siguiente a su config/application.rb
dentro de la clase de aplicación:
config.generators do |g|
g.fixture_replacement :machinist
end
Rieles 2
Ver la wiki.
Uso
Planos
Un blueprint describe cómo generar un objeto. El blueprint se encarga de proporcionar atributos que no le interesan a su prueba, lo que le permite concentrarse solo en los atributos que son importantes para la prueba.
Un plano simple podría verse así:
Post.blueprint do
title { "A Post" }
body { "Lorem ipsum..." }
end
Luego puede construir una publicación a partir de este modelo con:
Post.make!
Cuando usted llama make!
Maquinista llama Post.new
, luego ejecuta los atributos en su blueprint, llamando al bloque para que cada atributo genere un valor. Luego guarda y vuelve a cargar la publicación. (Lanza una excepción si la publicación no se puede guardar).
Puede anular los valores definidos en el blueprint pasando un hash para hacer:
Post.make!(:title => "A Specific Title")
Si desea generar un objeto sin guardarlo en la base de datos, reemplace
make!
con make
.
Atributos únicos
Para los atributos que deben ser únicos, puede llamar a la sn
desde el bloque de atributos para obtener un número de serie único para el objeto.
User.blueprint do
username { "user-#{sn}" }
end
Asociaciones
Si su objeto necesita objetos asociados, puede generarlos así:
Comment.blueprint do
post { Post.make }
end
Vocación Comment.make!
construirá un comentario y su publicación asociada, y guardará ambos.
El maquinista es lo suficientemente inteligente como para mirar la asociación y determinar qué tipo de objeto necesita crear, por lo que puede acortar el plan anterior a:
Comment.blueprint do
post
end
Si desea anular el valor de la publicación al crear el comentario, puede hacer esto:
post = Post.make(:title => "A particular title)
comment = Comment.make(:post => post)
Para has_many
y has_and_belongs_to_many
asociaciones, puede crear múltiples objetos asociados como este:
Post.blueprint do
comments(3) # Makes 3 comments.
end
Planos con nombre
Los blueprints con nombre le permiten definir variaciones en un objeto. Por ejemplo, suponga que algunos de sus Usuarios son administradores:
User.blueprint do
name { "User #{sn}" }
email { "user-#{sn}@example.com" }
end
User.blueprint(:admin) do
name { "Admin User #{sn}" }
admin { true }
end
Vocación:
User.make!(:admin)
utilizará el :admin
Plano.
Los blueprints con nombre llaman al blueprint predeterminado para establecer los atributos que no se proporcionan específicamente, por lo que en este ejemplo el email
el atributo aún se generará incluso para un usuario administrador.
Debe definir un blueprint predeterminado para cualquier clase que tenga un blueprint con nombre, incluso si el blueprint predeterminado está vacío.
Planos en objetos Plain Old Ruby
El maquinista también trabaja con objetos Ruby viejos y sencillos. Digamos que tienes una clase como:
class Post
extend Machinist::Machinable
attr_accessor :title
attr_accessor :body
end
Puede diseñar la clase Post como cualquier otra cosa:
Post.blueprint do
title { "A title!" }
body { "A body!" }
end
Y Post.make
construirá una nueva Publicación.
Otros trucos
Puede hacer referencia a los atributos ya asignados al construir un nuevo atributo:
Post.blueprint do
author { "Author #{sn}" }
body { "Post by #{object.author}" }
end
Más detalles
¡Lee el código! No realmente. Escribí este código para ser leído.
Consulte las especificaciones, comenzando con la especificación de Machinable.
Compatibilidad
He probado esto con:
Versiones de Ruby: 1.8.7, 1.9.2, 1.9.3, 2.0.0 Versiones de Rails: 2.3, 3.0, 3.2
También puede ser feliz con otras versiones, pero no prometo nada. Los parches de compatibilidad son bienvenidos.
Desarrollando
Las especificaciones de Machinist y el código fuente se escribieron para ser leídos, y estoy muy contento con ellos. ¡No tengas miedo de echar un vistazo debajo del capó!
Si desea enviar un parche:
- Bifurcar el proyecto.
- Haga su adición de características o corrección de errores.
- Añadir pruebas para ello. Esto es importante para no romperlo en una versión futura sin querer.
- Comprométete, no te metas con el rakefile, la versión o el historial. (si quieres tener tu propia versión, está bien, pero puedes ignorar la versión en una confirmación por sí misma cuando la saque)
- Envíame una solicitud de extracción. Puntos de bonificación por ramas temáticas.
Estado
En uso activo en varias aplicaciones grandes de Rails 2 y 3.
El desarrollo es esporádico en el mejor de los casos, ya que me encuentro cada vez con menos necesidad de fábricas en las pruebas. Vea el excelente artículo de Bo Jeanes sobre el tema.
Si alguien quiere hacerse cargo del mantenimiento, hágamelo saber.
Colaboradores
Maquinista es mantenido por Pete Yandell ([email protected], @notahat)
Otros contribuyentes incluyen:
Marcos Arias, Jack Dempsey, Jeremy Durham, Clinton Forbes, Perryn Fowler, Niels Ganser, Jeremy Grant, Jon Guymon, James Healy, Ben Hoskings, Evan David Light, Chris Lloyd, Adam Meehan, Kyle Neath, Lawrence Pit, Xavier Shay, TJ Sheehy, Roland Swingler, Gareth Townsend, Matt Wastrodowski, Ian White
Gracias a la chica de la fábrica de Thoughtbot. Maquinista fue escrito porque me encantaba la idea detrás de Factory Girl, pero pensé que la filosofía no era del todo correcta y odié la sintaxis.
Idiomas
-
Rubí
100,0%