Sorunumun çözülmesi oldukça kolay olduğundan eminim. Ancak, onu nasıl ve nerede çözeceğimi bulamıyorum. Şu anda Kullanıcı modelimde #follow
yöntemini test etmeye çalışıyorum. İşteRspec & FactoryGirl 'Ebeveyn kaydedilmeden oluşturulamıyor'
describe "#follow & #following?" do
before(:each) do
@other_user = FactoryGirl.create(:user)
end
it "returns false for user following other_user" do
expect(@user.following?(@other_user)).to eq(false)
end
it "returns true for user following other_user" do
@user.follow(@other_user)
expect(@user.following?(@other_user)).to eq(true)
end
end
#follow
yöntem olup:
def follow(other_user)
active_relationships.create(followed_id: other_user.id)
end
iade edilen hata You cannot call create unless the parent is saved
İşte ben testtir. Açıkçası burada söz konusu olan ebeveyn @other_user
. Şimdi ilk test amaçlanan şekilde geçiyor çünkü biz #follow
yöntemini çalıştırdığımızda olduğu gibi yaratılan bir yöntem çalıştırmıyoruz. Sorum şu: Bu @other_user
'u nasıl kaydedersem, böylece bir active_relationship
oluşturabilirim. İşte
@user
takdim ediliyor nasıl: Ayrıca
before { @user = FactoryGirl.build(:user) }
subject { @user }
, @user
tüm diğer testler ile çalışıyor. .persisted?
'u @user
& @other_user
üzerinde çalıştırırken, true
'u alırım. @spickermann'ın belirttiği gibi,
ve nasıl 'user' yaratılıyor @? –
Gerçekten de '@ other_user' kaydedilmemiş mi? Tahminim, @ kullanıcısı kaydedilmeyecek. Bunu test etmek için her ikisinde de "devam ettir" mi? Ayrıca, her iki durumda da 'hataları 'olarak adlandırmak isteyebilirsiniz, belki de fabrika geçerli örnekler vermez. – spickermann
'FactoryGirl.build (: user)' bir unlu kullanıcı döndürdüğünden, 'user.persisted?' 'True' döndürdüğünden şüphe duyuyor ... Lütfen @ @ user.save' önce @ user.follow (@other_user) ekleyin 've bunun örneğini geçelim diye bir test yapalım ... – spickermann