【发布时间】:2017-07-04 15:59:24
【问题描述】:
我目前正在为 Django 应用程序(+ REST 框架)编写一些测试,并且在将测试数据加载到数据库中时遇到了一些问题。
让我用一些(非常简化的)代码来解释一下:
我有一个 django 视图,类似于:
view.py
from myapp.models import Item
from myapp.utils import MyClass
# need to initialize with the set of items
item_set = {item.name for item in Item.objects.all()}
my_class_object = MyClass(item_set)
class MyView(APIView):
def post(selfself, request):
result = my_class_object.process(request.data)
return Response(result)
所以基本上我需要用数据库中的一些数据初始化一个类,然后在我的视图中使用这个类来处理端点接收到的数据。
现在测试:
my_test.py
from rest_framework.test import APILiveServerTestCase
from myapp.models import Item
class MyTest(APILiveServerTestCase):
def setUp(self):
self.URL = '/some_url_linking_to_myview/'
# load some data
Item.objects.create(name="first item")
Item.objects.create(name="second item")
def test_myview_return_correct_result(self):
post_data = {"foo"}
response = self.client.post(self.URL,
data=post_data,
format='json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, {"my_expected_result"})
运行测试时,当前发生的是 view.py 在 setUp() 方法执行之前加载,所以当我用这两个实例化类时行:
item_set = {item.name for item in Item.objects.all()}
my_class_object = MyClass(item_set)
数据库仍然是空的。
我想知道是否有办法在执行 view.py 之前将数据导入数据库,或者在 setUp() 之后以某种方式强制重新加载应用程序,或者实例化我的类在其他地方加载数据后调用它?
谢谢!
【问题讨论】:
-
这很好地说明了为什么您不应该将数据库访问代码放在模块级别。
标签: python django django-rest-framework django-testing django-tests