我正在为使用django编写的基于Web的应用程序编写单元测试用例。对于django类的单元测试,我使用django.test中提供的TestCase类。
现在,当我通过client.get()方法测试get_queryset()方法时,它将返回错误:
引发DatabaseError(“数据库不支持此查询。”)
DatabaseError:数据库不支持此查询。
这是我要测试的方法:
class IngredientAll(generics.ListAPIView): permission_classes = (permissions.IsAuthenticated,) model = Ingredient serializer_class = IngredientListSerializer def get_queryset(self): userCompanyId = self.request.user.get_profile().companyId ingredients = Ingredient.objects.filter(company = userCompanyId) return ingredients
这是我为同一情况编写的测试用例:
class IngredientAllTestCase(unittest.TestCase): def setUp(self): self.user=User(username='jimish') password = 'password' self.user.set_password(password) self.user.save() self.client = Client() self.client.login(username=self.user.username, password=password) def test_IngredientAll(self): url = reverse('lib:ingredient-all') response = self.client.get(url) self.assertEqual(response.status_code,status.HTTP_200_OK)
可以向您保证,URL反向转换没有错误。我已经从python shell检查了它。这是网址格式:
url(r'^allingredients$', views.IngredientAll.as_view(), name='ingredient-all'),
错误显示在
response = self.client.get(url)
有人帮助我会很棒,我将非常感谢。
这是错误的完整回溯:
$ python manage.py测试lib.tests:IngredientAllTestCase
$ python manage.py测试lib.tests:IngredientAllTestCase
Ë追溯(最近一次通话):
在test_IngredientAll中的文件“ C:\ Apache2 \ htdocs \ iLab \ api \ lib \ tests.py”,第94行,所有响应= self.client.get(url)
文件“ C:\ Python27 \ lib \ site-packages \ django \ test \ client.py”,第442行,在get response = super(Client,self).get(path,data = data,** extra)中
在get return self.request(** r)中的文件“ C:\ Python27 \ lib \ site-packages \ django \ test \ client.py”,行244
get_response中的第111行的文件“ C:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ base.py”
response = callback(request, *callback_args, **callback_kwargs)
文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ compat.py”,行127,在视图中返回self.dispatch(request,* args,** kwargs )
文件“ C:\ Python27 \ lib \ site-packages \ django \ views \ decorators \ csrf.py”,第39行,在wrapped_view中,resp = view_func(* args,** kwargs)
文件“ C:\ Python27 \ lib \ site-packages \ django \ views \ decorators \ csrf.py”,第52行,在wrapped_view中返回view_func(* args,** kwargs)
文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ views.py”,行399,调度响应= self.handle_exception(exc)
文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ views.py”,第396行,在调度响应=处理程序中(请求,* args,** kwargs)
获取返回Response(serializer.data)中的文件“ C:\ Apache2 \ htdocs \ iLab \ api \ lib \ views.py”,行431
文件505中的文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ serializers.py”,数据self._data = [该项的[self.to_native(item)在obj中]
_result_iter self._fill_cache()中的文件“ C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py”,第107行
_fill_cache self._result_cache.append(self._iter.next())中的文件“ C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py”,第774行
文件“ C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py”,第275行,位于迭代器中,用于编译器中的行。results_iter():文件“ build \ bdist.win-amd64 \ egg \ djangotoolbox \ db \ basecompiler.py“,第225行,在results_iter self.check_query()中
在check_query中,文件“ build \ bdist.win-amd64 \ egg \ djangotoolbox \ db \ basecompiler.py”行273引发DatabaseError('数据库不支持此查询。)
DatabaseError:数据库不支持此查询。
-------------------- >>开始捕获日志<< --------------------
django.request:错误:内部服务器错误:/ allingredients
追溯(最近一次通话):
get_response response = callback(request(request,* callback_args,** callback_kwargs)中的文件“ C:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ base.py”,第111行
文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ compat.py”,行127,在视图中返回self.dispatch(request,* args,** kwargs )
文件“ C:\ Python27 \ lib \ site-packages \ django \ views \ decorators \ csrf.py”,第39行,在wrapped_view中,resp = view_func(* args,** kwargs)
文件“ C:\ Python27 \ lib \ site-packages \ django \ views \ decorators \ csrf.py”,第52行,在wrapped_view中返回view_func(* args,** kwargs)
文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ views.py”,行399,调度响应= self.handle_exception(exc)
文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ views.py”,第396行,在调度响应=处理程序中(请求,* args,** kwargs)
获取返回Response(serializer.data)中的文件“ C:\ Apache2 \ htdocs \ iLab \ api \ lib \ views.py”,行431
文件505中的文件“ C:\ Python27 \ lib \ site-packages \ djangorestframework-2.3.8-py2.7.egg \ rest_framework \ serializers.py”,数据self._data = [该项的[self.to_native(item)在obj中]
_result_iter self._fill_cache()中的文件“ C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py”,第107行
文件“ C:\ Python27 \ lib \ site-packanosetests lib.tests:IngredientAllTestCase --verbosity = 1正在销毁别名'default'的测试数据库...
ges \ django \ db \ models \ query.py“,第774行,在_fill_cache self._result_cache.append(self._iter.next())中
文件“ C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py”,第275行,位于迭代器中,用于editor.results_iter()中的行:
在result_iter self.check_query()中,文件“ build \ bdist.win-amd64 \ egg \ djangotoolbox \ db \ basecompiler.py”,第225行
在check_query中,文件“ build \ bdist.win-amd64 \ egg \ djangotoolbox \ db \ basecompiler.py”,第273行
raise DatabaseError('This query is not supported by the database.')
DatabaseError:数据库不支持此查询。
--------------------- >>结束捕获日志<< ---------------------
在0.900秒内进行了1次测试