我有一个API ListView端点,当我用Postman拍摄它时,它工作正常,但在测试中返回空的queryset和状态404:
web_1 | > assert response.status_code == 200
web_1 | E assert 404 == 200
我使用pytest fixture来创建我的对象:
@pytest.fixture
def event(system, new_conflict):
return Event.objects.create(
system=system,
event_type='new_conflict',
details=new_conflict
)
fixture在其他(非API)测试中运行良好,所以我认为问题可能出在我测试API的方式上。在pycharm调试器中,我可以看到视图被执行了,所以这不是一个url问题。 在postman中,该端点正确地返回一个json,其中包含事件对象和状态200。
from rest_framework.test import APIClient
from event_finder.models import Event
import pytest
@pytest.mark.django_db
def test_list_events_all(event):
client = APIClient()
response = client.get(path='/api/events/', format='json')
assert response.status_code == 200
from rest_framework.generics import ListAPIView
from event_finder.models import Event
from event_finder.serializers import EventSerializer
class ListView(ListAPIView):
queryset = Event.objects.all()
serializer_class = EventSerializer
问题来源StackOverflow 地址:/questions/59387250/how-to-properly-test-django-api-listview-with-pytest
这是一个非常简单的例子。但也许你可以让它像这样工作:
from rest_framework.test import APITransactionTestCase
from rest_framework.test import status
class TestThis(APITransactionTestCase):
def test_this(self):
data = {"key": "value"}
response = self.client.post("/api/resource", data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
我希望它能有所帮助。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。