Factory Girl-Assoziationen undefined Methode für was ein Verband sein sollte - Ruby-on-Rails, Verbände, Factory-Bot

Ich versuche einen Fehler mit zwei zu erstellenFactoryGirl Modelle. Ich habe Autos und Autohersteller. Autos gehören den Autoherstellern, deshalb gehört der Fremdschlüssel / Variable ins Auto. Wenn ich meine Tests ausführen, erhalte ich diesen Fehler.

Failure/Error: car = FactoryGirl.build(:car)
NoMethodError:
undefined method `car_manufacturer=" for #<Car:0x0000010437a7d0>

Hier sind meine Fabriken im Ordner spec / factories

FactoryGirl.define do
factory :car do
color "Black"
year 2012
mileage 50000
description "Badass used car"
car_manufacturer
end
end

FactoryGirl.define do
factory :car_manufacturer do
name "Speed Racer Inc."
country "Japan"
end
end

Ich habe nichts in meinen Validierungen für Assoziationen eingerichtet, weil das, was ich verstanden habe, ein Fabrikmädchen ist, also sollte das funktionieren. Vielleicht stimmt etwas in meiner Spezifikation nicht:

scenario "I want to associate a car with a car manufacturer" do
car_manufacturer = FactoryGirl.create(:car_manufacturer)
car = FactoryGirl.build(:car)
car_count = Car.count
visit new_car_path
fill_in "Color", with: car.color
select car.year, from: "Year"
fill_in "Mileage", with: car.mileage
fill_in "Description", with: car.description
select car_manufacturer.name, from: "Owner"
click_on "Create Car"
expect(page).to have_content("Car Submitted")
expect(Car.count).to eql(car_count + 1)
end

Danke für die Hilfe. Ich bin mir nur nicht sicher, warum das passieren würde und weiß nicht, was ich versuchen sollte, es zu beheben.

Ok, ich denke ich habe die Antwort gefunden. Bevor ich die Assoziationen in meiner Modelldatei nicht hatte, habe ich sie seither hinzugefügt:

require "spec_helper"

describe Car do
it { should validate_presence_of(:color) }
it { should validate_presence_of(:year) }
it { should validate_presence_of(:mileage) }
it { should ensure_inclusion_of(:year).in_array(Car::YEARS) }
it { should_not have_valid(:year).when("","nineteenninetynine",1979) }
it { should_not have_valid(:mileage).when("3300 miles") }
it { should belong_to(:car_manufacturer) }
end

require "spec_helper"

describe CarManufacturer do
it { should validate_presence_of(:name) }
it { should validate_presence_of(:country) }
it { should_not have_valid(:name).when("",nil) }
it { should_not have_valid(:country).when("",nil) }
it { should have_many(:cars) }
end

Meine neue Frage ist, hängt Factory Girl davon abdie Modellvalidierungen? Ich hatte den Eindruck, dass es nicht so war. Kann jemand klären? Ich habe die Github-Dokumentation ausprobiert, aber ich kann mich nicht erinnern, dass das explizit gesagt wurde. Danke.

Antworten:

2 für die Antwort № 1

Können Sie überprüfen, ob Sie die Testdatenbank migriert haben? Wenn ein Accessor nicht ordnungsgemäß funktioniert (in diesem Beispiel car_manufacturer=), ist es entweder falsch geschrieben oder die Testdatenbank wurde nicht korrekt migriert (da AR die Tabelle beeinflussen wird).


Verwandte Fragen
Speisekarte