Django测试使用新ID创建表单

时间:2013-03-17 13:51:21

标签: python django

我刚把所有的AJAX验证代码都移到了Django Forms上。我需要一些帮助来更新我的测试。我基本上有一些测试数据,声明为常量,用于所有套件。在我的测试中,我反复使用这些数据。

作为设置的一部分,我创建了一些用户并登录了我需要的用户:

def setUp(self):
    self.client = Client()
    create_user(username='staff', email='staff@staff.com',
                password='staff', staff=True)
    create_user(username='agent', email='agent@agent.com',
                password='agent', staff=False)
    ShiftType.objects.create(type_id='SI', description='Sales Inbox')
    self.client.login(username='staff', password='staff')

拆卸会删除此数据(或以前用于):

def tearDown(self):
    # Clean up the DB
    self.client.logout()
    ShiftType.objects.all().delete()
    User.objects.all().delete()
    Event.objects.all().delete()
    RecurrentEvent.objects.all().delete()

这工作正常,但现在表单无法验证,因为用户给出的表单值id每次都会递增。例如:

 ERROR: <ul class="errorlist"><li>employee_id<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul>

打印表单可以让我看到每次都会增加ID。

即使我要删除所有员工,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

我会研究使用文本夹具而不是每次都创建和删除数据。这在Django中很容易做到。在您的tests.py中,它看起来像这样

class BlogTest(TestCase):
    fixtures = ['core/fixtures/test.json']

当你这样做时,django将为你构建一个测试数据库,将夹具加载到其中,运行测试,然后在测试完成后吹掉数据库。如果你想使用不同的数据库引擎(我们这样做是为了让我们的测试使用sqlite,因为它很快)你可以把这样的东西扔进你的settings.py

这样就可以确保ID每次都能解决问题。