ruby on rails - test - Asociaciones automáticas en rubí sobre rieles.
rspec rails (5)
Al leer la documentación de la API, así es exactamente como se supone que se comportan los dispositivos generados automáticamente: si desea tener un valor de ID específico para un dispositivo de antemano, probablemente debería asignarlo usted mismo.
Si no, bueno, de los documentos API:
The generated ID for a given label is constant, so we can discover any fixture‘s ID without loading anything, as long as we know the label.
Como se describe en este artículo , estoy usando asociaciones automáticas en los accesorios. Por ejemplo, si un objeto de región tiene un ID de país, en lugar de hacer "ID_de_grupo": 1, hago "país": "EE. UU.". "EE. UU." Es una etiqueta en mi archivo countries.yml, así que los aparatos saben cómo ocuparse de esto. Sin embargo, esto solo funciona cuando no especifica un valor de ID para el objeto de países. Por lo tanto, no puedo asignar el ID de EE. UU. A 1. Pero si no lo asigno a 1, termina siendo un gran valor 8974343 ... lo que es un poco extraño. ¿Hay alguna manera de hacer que los dispositivos para generar automáticamente los ID no sean muy altos? ... o esta bien?
Así es como se obtiene una identificación generada automáticamente de la etiqueta del accesorio.
Fixtures.identify(:reginald)
Como no tengo suficiente reputación para comentar, esta es la documentación real de Rails 4.1:
Bajo la interpolación de la etiqueta del accesorio:
monkey_id: <%= ActiveRecord::FixtureSet.identify(:reginald) %>
pirate_id: <%= ActiveRecord::FixtureSet.identify(:george) %>
La identificación del dispositivo viene directamente del hash de su nombre (así es como "podemos descubrir la ID de cualquier dispositivo sin cargar nada, siempre que conozcamos la etiqueta")
Prueba automatizada para hacer cumplir la integridad del accesorio
class FixtureIntegrityTest < ActiveSupport::TestCase
context "fixture integrity" do
should "work" do
fixtures = Dir["test/fixtures/*.yml"].map do |file|
[file, File.basename(file).sub(//..*/, "").singularize, YAML.load(ERB.new(File.read(file)).result)]
end
failures = fixtures.reject(&:last).map { |file,*| "#{file} is empty!"}
failures = failures.presence || fixtures.map do |_, klass, content|
content.select{ |_,fixture| fixture["id"] }.map do |name, _|
fixtures.map do |file, _, content|
content.select { |_,fixture| fixture[klass] == name }.map do |_, fixture|
"#{file} uses #{klass}: #{name}, but should use the id!"
end
end
end
end.flatten.compact
assert_equal [], failures
end
end
end