Django: How to create a model dynamically just for testing

后端 未结 11 820
鱼传尺愫
鱼传尺愫 2020-12-02 05:15

I have a Django app that requires a settings attribute in the form of:

RELATED_MODELS = (\'appname1.modelname1.attribute1\',
                  \         


        
11条回答
  •  不思量自难忘°
    2020-12-02 06:04

    I shared my solution that I use in my projects. Maybe it helps someone.

    pip install django-fake-model

    Two simple steps to create fake model:

    1) Define model in any file (I usualy define model in test file near a test case)

    from django_fake_model import models as f
    
    
    class MyFakeModel(f.FakeModel):
    
        name = models.CharField(max_length=100)
    

    2) Add decorator @MyFakeModel.fake_me to your TestCase or to test function.

    class MyTest(TestCase):
    
        @MyFakeModel.fake_me
        def test_create_model(self):
            MyFakeModel.objects.create(name='123')
            model = MyFakeModel.objects.get(name='123')
            self.assertEqual(model.name, '123')
    

    This decorator creates table in your database before each test and remove the table after test.

    Also you may create/delete table manually: MyFakeModel.create_table() / MyFakeModel.delete_table()

提交回复
热议问题