ich eine Klasse erhalten haben, ist, dass die Basis einiger anderer Klassen, die das Verhalten spezialisiert:Testing einfach STI mit factory
class Task < ActiveRecord::Base
attr_accessible :type, :name, :command
validates_presence_of :type, :name, :command
# some methods I would like to test
end
Die Klasse CounterTask von Aufgabe erbt
class CounterTask < Task
end
Das alles funktioniert Gut, bis ich versuche, die Basisklasse zu testen, da sie einen Typ haben muss.
FactoryGirl.define do
factory :task do
sequence(:name) { |n| "name_#{n}" }
sequence(:command) { |n| "command_#{n}" }
end
end
Wie würden Sie die grundlegende Funktionalität der Superklasse testen?
Sollte Ihr Test nicht so geschrieben werden, dass er die Funktionalität testet, anstatt die Implementierung? In diesem Fall würde das bedeuten, dass Sie testen würden, ob "CounterTask" die Attribute und andere Dinge hat, die es von "Task" erhält. Wenn Sie Ihre Implementierung ändern, zum Beispiel nicht mehr mit STI. Ihr Test könnte immer noch erfolgreich sein, wenn Ihre CounterTask das gleiche Verhalten hat. – Arjan
Das ist ein guter Punkt. Ich dachte nur, ich werde einige Duplikate im Test speichern, wenn ich zuerst die Basisfunktionalität und dann die Kindklassen teste ... Vielleicht könnte dies die Lösung für mein Problem sein. – Mark