Ich baue einen sehr grundlegenden Test, um zu überprüfen, ob ein Objekt in einer Beziehung erstellt wird. Website has_many languages
. Ich habe die Methode , die ein Array von IDs erhält und fügt sie hinzu.Elegante Möglichkeit zu testen, dass neue Objekte erstellt werden
Dies ist einige meiner Tests:
describe '#add_languages' do
subject{ build(:website) }
it 'return nil if no language is added' do
expect(subject.add_languages []).to be_nil
end
it 'adds one single language' do
languages_ids = [Language.last.id]
original_count = subject.languages.count
subject.add_languages languages_ids
expect(subject.languages.count).to eq(original_count + languages_ids.count)
end
it 'adds multiple languages' do
languages_ids = Language.limit(3).pluck :id
original_count = subject.languages.count
subject.add_languages languages_ids
expect(subject.languages.count).to eq(original_count + languages_ids.count)
end
end
Was Ich mag es nicht
1) Der Code 2) Ich mag es nicht eq
für diese Verwendung dupliziert, aber nicht sicher, wie andere Matcher zu verwenden
Was wäre eine elegante Möglichkeit, diese Tests zu schreiben?
Können Sie einfach eine Funktion innerhalb der Beschreibung definieren, die ein Array von Sprach-IDs empfängt? Auf diese Weise können Sie den Code wiederverwenden, indem Sie einfach die Funktion aufrufen. Ich bin mir zu 99% sicher, dass Ruby und ROR dich dazu bringen werden. – corvuszero