test rails ruby-on-rails ruby ruby-on-rails-3 activerecord fixtures

ruby-on-rails - minitest rails



¿Cómo configuro mis accesorios para una relación has_and_belongs_to_many? (4)

¿Está su regions.yml en el directorio de pruebas / accesorios? ¿Qué hay de companies.yml? Su código "regiones: una, dos", para una compañía determinada, debería funcionar.
Rails carga automáticamente los accesorios en este directorio cuando ejecuta la prueba. Si las ubicaciones son correctas, publique el resultado de la prueba (SQL generado) cuando ejecute las pruebas.

Tengo los siguientes modelos:

class Company < ActiveRecord::Base has_and_belongs_to_many :regions class Region < ActiveRecord::Base has_many :requests has_and_belongs_to_many :companies class RequestForProposals < ActiveRecord::Base belongs_to :region

Cada vez que recibo una nueva solicitud, deseo enviar una notificación a las compañías activas en la misma región.

¿Cómo configuro esto en mis accesorios para poder probar la lógica de encontrar las compañías correctas?

He intentado

region_ids: 1, 2 regions: one, two

en companies.yml, pero ninguno trabaja en la asignación de regiones a las empresas.

Aquí hay un resumen del SQL generado: https://gist.github.com/2713518


Además de la respuesta aceptada si necesita calcular dicha identificación por sí mismo, por ejemplo, tiene algunas referencias sueltas u otra fuente de datos, solo agregue:

def fixh(key) ActiveRecord::FixtureSet.identify key end

a tu test_helper.rb y luego usa de esta manera en aparatos:

security_context1: ext_id: <%= fixh :user1 %>


No estoy seguro de cómo se utilizan los accesorios YAML en estos días. ¿Has probado FactoryGirl para crear instancias de objetos db mientras prueba? Sin embargo, hace lo mismo que los accesorios, de una manera mucho más sofisticada.

Los siguientes pasajes asumen que está utilizando rspec como marco de prueba.

Después de incluir factory_girl-rails en su Gemfile y actualizar spec/spec_helper.rb según el README de factory_girl s, cree los siguientes archivos:

# spec/factories/company_factories.rb FactoryGirl.define do factory :company do title { |n| "Test Company #{n}" } # whatever else fields after_create { |company| company.regions << FactoryGirl.create(:region) } end end # spec/factories/region_factories.rb FactoryGirl.define do factory :region do # whatever fields here end end # spec/factories/request_factories.rb FactoryGirl.define do factory :request do # whatever fields here end end

Ahora la pregunta real es: ¿cuál es el código de prueba real que estás haciendo?


por

regions: one, two

En companies.yml para trabajar, debe permitir que Rails asigne automáticamente los ID para las regiones. Esto se debe a que (para evitar tener que haber leído regions.yml antes de companies.yml) rails calcula los identificadores que mantiene en la tabla de unión a partir de los nombres de los dispositivos de las compañías. si usted mismo ha asignado las identificaciones, no coincidirán con las calculadas.

Desde el sql que ha proporcionado, parece que está configurando los ID en las regiones a 1 y 2, es decir, su regions.yml tiene

one: id: 1 name: MyString

Quita el id:1 y deberías estar bien. También deberá actualizar cualquier otro archivo (por ejemplo, request_for_proposals.yml) que se refiera a regiones, reemplazando

region_id: 1

con

region: one

Rails sabrá que eso significa establecer region_id en el id para la región con la etiqueta one en tus accesorios.