Sie können nicht auf Körper nach der Lektüre von Antrag s-Datenstrom nach dem Start von py.test

Guten Tag.

Ich bin testing-api basiert auf django-rest-framework mit pytest. Ich habe die folgende Methode erzeugt ein neues Objekt (Methode entnommen aus hier):

class JSONResponse(HttpResponse):
    """
    An HttpResponse that renders its content into JSON.
    """

    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)


@csrf_exempt
@api_view(('POST',))
@permission_classes((IsAuthenticated, ))
def create_transaction(request):
    """
    The method takes the data in JSON-format.
    If the data is correct Transaction object will created, otherwise it returns an error also in JSON-format.
    """

    stream = StringIO('[' + request.raw_post_data + ']')
    data = JSONParser().parse(stream)
    serializer = NewTransactionSerializer(data=data, many=True)
    if serializer.is_valid():
        serializer.save()
        return JSONResponse(serializer.data, status=201)
    else:
        return JSONResponse(serializer.errors, status=400)

Schrieb ich es weiter testen:

@pytest.mark.django_db
def test_create_method(client):
    correct_data = '''{ "var1": "111",
                        "var2": "222",
                        "var3": 2 }'''
    client.login(username='[email protected]', password='test')
    data = json.loads(correct_data)
    response  = client.post('/rest2/create_transaction/', data, format='json')
    content = json.loads(response.content)
    assert content[0]['var1'] == '111'
    assert content[0]['var2'] == '222'
    assert content[0]['var3'] == 2
    assert response['Content-Type'] == 'application/json'
    assert response.status_code == 201

Beim starten pytest zeigt Folgendes an: Exception: You cannot access body after reading from request's data stream. Seiner ist kaputt gegangen, als ich die post-Daten an url.
Wenn ich den gleichen code in die shell, der code läuft ohne Probleme. Ich bin das neue zu testen, kann etwas übersehen, bitte helfen.

  • Sie könnten versuchen, um Ihre Content-Type und status_code Behauptungen vor dem laden des response.content? Auch, bitte geben Sie einen vollständigen traceback.
  • Es ändert sich auch nichts, weil der Fehler erscheint, bevor. traceback - pastebin.com/ZrHTeFme
  • Ich habe dieses Problem auch. Werde versuchen und schauen Sie hinein.
InformationsquelleAutor aphex | 2014-01-27
Schreibe einen Kommentar