4

我正在嘗試爲使用Django REST框架編寫的REST API編寫一些功能測試。這個框架並不是特定的,因爲它主要是一般的Django的東西。爲Django RESTful API編寫功能測試

這就是我想要做的

  1. 在測試類
  2. 請求用戶使用測試客戶端

測試從API令牌的setUp方法創建一個用戶.py

from django.test import LiveServerTestCase 

from django.contrib.auth.models import User 
from django.test.client import Client 
from rest_framework.authtoken.models import Token 

class TokenAuthentication(LiveServerTestCase): 
    def setUp(self): 
     user = User.objects.create(username='foo', password='password', email="[email protected]") 
     user.save() 
     self.c = Client() 

    def test_get_auth_token(self): 
     user = User.objects.get(username="foo") 
     print user # this outputs foo 
     print Token.objects.get(user_id = user.pk) # this outputs a normal looking token 
     response = self.c.post("/api-token-auth/", {'username': 'foo', 'password': 'password'}) 
     print response.status_code # this outputs 400 
     self.assertEqual(response.status_code, 200, "User couldn't log in") 

當我運行測試時,它返回狀態400而不是200,所以用戶沒有被認證。如果我輸入已經在數據庫中的用戶的證書,它會通過。所以我假設在測試類中創建的記錄只能在它自己的方法中訪問,這可能是因爲它是爲單元測試而設計的。但是我使用數據庫中的數據來執行測試,如果數據發生變化,它將會失敗。

在Django中應該如何執行像這樣的功能測試,在運行測試之前需要創建數據?

回答

9

您正在創建用戶不正確。 User.objects.create以純文本方式設置密碼,而不是通過哈希機制。您應該使用User.objects.create_user,它將正確設置密碼,以便您可以使用用戶名和密碼進行身份驗證。

+0

嗯,這是尷尬,謝謝! –