我已经在TestCase上成功编写了文件,并且工作得很好。
首先看看我的代码:
下面是我的tsc
tests.py
上面的代码片段工作正常,但是问题是..一旦我实施了身份验证系统,它就无法工作
下面是我的from django.shortcuts import reverse
from rest_framework.test import APITestCase
from ng.models import Contact
class TestNoteApi(APITestCase):
def setUp(self):
# create movie
self.contact = Contact(userId=254, name="The Space Between Us", phone=2017, email='doe@f.com')
self.contact.save()
def test_movie_creation(self):
response = self.client.post(reverse('getAndPost'), {
'userId': 253,
'name': 'Bee Movie',
'phone': 2007,
'email': 'ad@kjfd.com'
})
self.assertEqual(Contact.objects.count(), 2)
settings.py
如果我随意更改为REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
,则测试效果很好,但如果保留AllowAny
而不是IsAuthenticated
,则该测试无效。
我希望即使我获得AllowAny
的许可,测试也能很好地运行。
有人可以建议我该怎么做吗?我没有IsAuthenticated
文件中要更改的内容或添加的内容。
答案 0 :(得分:0)
您应该使用user
方法创建setUp
对象,并使用client.login()
或force_authenticate()
进行经过身份验证的请求:
class TestNoteApi(APITestCase):
def setUp(self):
# create user
self.user = User.objects.create(username="test", password="test")
# create movie
self.contact = Contact(userId=254, name="The Space Between Us", phone=2017, email='doe@f.com')
self.contact.save()
def test_movie_creation(self):
# authenticate client before request
self.client.login(username='test', password='test')
# or
self.clint.force_authenticate(user=self.user)
response = self.client.post(reverse('getAndPost'), {
'userId': 253,
'name': 'Bee Movie',
'phone': 2007,
'email': 'ad@kjfd.com'
})
self.assertEqual(Contact.objects.count(), 2)