Titel sagt alles. Ich werde die Frage veranschaulichen, indem ich zeige, was ich versuche zu tun.Gibt es eine Möglichkeit, ein Scheinmodell in Django-Komponententests zu deklarieren?
Ich habe Djangos erweitert ModelForm
Klasse eine ResourceForm
, zu schaffen, die einige Funktionen in seine clean()
Methode für die Arbeit mit Resources
, deren Einzelheiten sind unwichtig gebaut hat. Die ist im Grunde eine Bibliotheksklasse und es gibt keine Modelle in der App, in denen die ResourceForm
Klasse definiert ist, so dass ich nicht einfach ein vorhandenes Modell aus der App verwenden kann (z. B. mock.Mock(spec=SomeModel)
ist keine Option).
Ich versuche, Unit-Test ResourceForm
, aber ich kann nicht den richtigen Weg finden, um eine Django Model
, zu verspotten, die seit ResourceForm
erbt von ModelForm
erforderlich ist. Dies ist eine von mehreren Anstrengungen, die ich versucht habe (nicht mock
in diesem Fall verwendet wird, aber es dient zur Veranschaulichung, was versucht wird):
class ResourceFormTestCase(TestCase):
class SampleModel(Model):
sample_field = CharField()
class SampleResourceForm(ResourceForm):
class Meta():
model = SampleModel
fields = ['sample_field']
def test_unsupported_field_raise_validation_error(self):
print('Test validation error is raised when unsupported field is provided')
form_data = {'sample_field': 'FooBar', 'unsupported_field': 'Baz'}
form = self.SampleResourceForm(data=form_data)
Aber das wirft:
RuntimeError: Model class customer.tests.tests_lib_restless_ext.SampleModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Ich bin offen zu Vorschlägen, wenn ich in der Art bin, wie ich versuche, das zu testen.