maquinista 2 - KolMitE

maquinista 2

maquinista 2

noviembre 22, 2022 Software en General 0

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 Gemfileen 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%



Por favor Comparte y Síguenos:
RSS
Follow by Email
Facebook
Twitter

Deja una respuesta