Maison > Questions et réponses > le corps du texte
Le code du test est le suivant :
from django.test import TestCase
# Create your tests here.
class SendviewsTestCase(TestCase):
def test_get_data(self):
rep = self.client.post('/data/datamsg/',{'data_name':'测试数据'})
print (rep.content)
# 测试http请求的返回码是否正确
self.assertEqual(rep.status_code,200)
======================================================================
FAIL: test_get_data (dataforpro.tests.SendviewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yangtz/developproject/backend/dataforpro/tests.py", line 20, in test_get_data
self.assertEqual(rep.status_code,200)
AssertionError: 404 != 200
----------------------------------------------------------------------
Ran 1 test in 0.017s
FAILED (failures=1)
Destroying test database for alias 'default'...
Mais lorsque vous parcourez l'URL avec un navigateur, il renvoie normalement 200. Y a-t-il un problème avec le paramètre ?
怪我咯2017-05-18 11:03:59
Il semble que votre erreur soit 404, ce qui signifie que l'URL n'a pas été trouvée lors de l'accès à /data/datamsg/. Cela dépend de la configuration de votre adresse URL. Essayez /data/datamsg et supprimez le / après, ou peut-être. c'est ce que vous voulez. Ajoutez http://localhost ou quelque chose comme ça
曾经蜡笔没有小新2017-05-18 11:03:59
Vous avez dit que vous pouvez parcourir l'URL avec un navigateur
Lorsque vous accédez à l'URL via le navigateur, le navigateur enverra une requête GET
mais vous avez utilisé une requête POST dans le test.
Donc, même s'il n'y a aucun lien entre le fait que le navigateur soit normal et le test réussi ou non
曾经蜡笔没有小新2017-05-18 11:03:59
Lorsque 404 apparaît, cela devrait être comme le dit 1L, l'URL (partie hôte) doit être complétée. Parce que lors d'une demande via le navigateur, l'URL de la page commence par /, et le navigateur ajoutera automatiquement l'hôte et dans le cas de test unitaire, vous devez écrire vous-même l'URL complète ;
Lorsque 302 apparaît, vous devez vérifier : À quelle URL renvoie 302 ? Où avez-vous ajouté des restrictions/conditions de validation ? Par exemple, si « login_required » est ajouté, si le système vérifie qu'il n'y a pas de connexion, passera-t-il automatiquement à la page de connexion avec un 302 ?
Il existe une autre possibilité. Cela devrait être 403. Vous avez falsifié une requête POST et Django a une vérification CSRF par défaut.