0

我刚刚将我所有的 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 每次都在递增。

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

4

1 回答 1

1

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

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

当您执行此操作时,django 将为您构建一个测试数据库,将夹具加载到其中,运行您的测试,然后在测试完成后删除数据库。如果您甚至想使用不同的数据库引擎(我们这样做是为了让我们的测试使用 sqlite,因为它很快),您可以将类似的内容放入您的 settings.py

这将使 ID 每次都相同,这将解决您的问题。

于 2013-03-17T16:33:29.057 回答