Ich habe eine Viele-zu-Viele-Beziehung zu Rspec hergestellt und diese mit SystemSpec getestet. Aufgrund der Komplexität der ursprünglichen Tabellenstruktur hatte ich große Probleme, daher werde ich die folgenden Hinweise zusammenfassen.
Der Ausführungsabschluss ist wie folgt.
Die Tabellenstruktur sieht so aus. Die Haupttabellen sind "Büros" (eine Niederlassung eines Unternehmens) und "Geschäfte" (ein Geschäft, das ein Geschäftsziel ist), und "Büro" (eine Niederlassung) öffnet "evebt" und das Geschäft, das ein Geschäftsziel ist, kauft dort ein. `Mach mit. "Geschäfte" hat immer eine "Kategorie".
Aufgrund der Modellmethode brauchte ich, als ich eine "Fabrik" für "Events" herstellte, einen "Shop", der damit verbunden war. Aufgrund der Struktur habe ich jedoch einen Fehler erhalten, wenn ich es so geschrieben habe.
let!(:shop){FactoryBot.create(:shop)}
let!(:event){FactoryBot.create(:event)}
#=>Wenn hier kein Shop mit dem Ereignis verknüpft ist, tritt hier ein Fehler auf.
let!(:event_shops){FactoryBot.create(:event_shop, event: event, shop: shop)}
Aus diesem Grund habe ich beschlossen, eine Factory zu erstellen, die den zugehörigen "Shop" gleichzeitig mit der Erstellung der "Factory" von "Event" definieren kann.
Die erstellte Factory lautet wie folgt.
spec/factories/events.rb
FactoryBot.define do
factory :event do
office_id { nil }
name { "Testereignis" }
trait :with_shops do
after(:create) do |event|
category = FactoryBot.create(:category, :sequence)
create_list(:shop, 1, events: [event], category: category)
end
end
end
end
Erstellen Sie zunächst ein Merkmal mit dem Namen "with_shops" in der Factory von "event", damit Sie beim Erstellen des "event" auch den zugehörigen "shop" erstellen können. Ermöglichen Sie das Erstellen mehrerer "Shop" -Fabriken mit "create_list" (nur eine, da hier nur eine benötigt wird) und "[event]", sodass mehrere Instanzen von "event" aus "events" eingegeben werden können. Notiert als `und ein Array.
Außerdem werde ich später erklären, dass "Kategorie" absichtlich mit "Merkmal" bezeichnet wird.
spec/factories/categories.rb
FactoryBot.define do
factory :category do
name { "Medizinisches System" }
trait :sequence do
sequence(:id, 100)
name { "Bekleidungssystem" }
end
end
end
spec/system/events_spec.rb
let!(:event) { FactoryBot.create(:event, :with_shops, office: office, shops: [shop]) }
#Sie können hier keine Kategorie zum Einkaufen anwenden
Als nächstes wird in der Factory von "Kategorie" "Ereignis" in der Ansicht mehrmals generiert. Wenn daher die gleichzeitig erzeugte "Kategorie" des "Shops" jedes Mal auf eine andere "ID" (FK) gesetzt werden muss, tritt ein doppelter FK-Fehler auf.
Wenn Sie versuchen, "Kategorie" von "Systemspezifikation" auf "Geschäfte" von "Ereignis" anzuwenden, wenn Sie versuchen, eine Fabrik für "Geschäft" in "Spezifikation / Fabriken / Ereignisse.rb" zu erstellen, " Der externe Schlüssel existiert nicht "und ich habe eine Fehlermeldung erhalten.
Daher habe ich versucht, nacheinander verschiedene id
(FK) -Kategorien mit sequence
zu erstellen.
Die Lösung hat lange gedauert, aber ich bin froh, dass ich es geschafft habe, sie zu lösen! Dieses Mal war die Struktur der DB kompliziert, so dass ich eine so komplizierte Spezifikation schreiben musste, aber In Zukunft möchte ich das DB-Design festigen, damit einfachere Tests durchgeführt werden können. .. .. ..
▼ Artikel, auf die ich besonders Bezug genommen habe
Recommended Posts