Django Unittests客户端登录:在测试套件中失败,但在Shell中失败

agc*_*nti 5 python django unit-testing

我正在对我的家庭观点进行基本测试.从shell中记录客户端时,同一行代码在使用测试套件时无法记录客户端.

使用Django测试套件时记录客户端的正确方法是什么?

要么

知道为什么客户端没有使用我当前的方法登录吗?

壳牌测试:

import unittest
from django.test.client import Client
from django.test.utils import setup_test_environment
setup_test_environment()

client = Client()
login = client.login(username='agconti', password='password')

# login --> evals to True
Run Code Online (Sandbox Code Playgroud)

Django测试套件:

#### View Tests ####
import unittest
from django.test.client import Client
from shopping_cart.models import Store, Order, Item, Transaction

class Home_ViewTest(unittest.TestCase):
    def setUp(self):
        self.client = Client()
        # login user
        login = self.client.login(username='agconti', password='password')
        # Check login
        self.assertEqual(login, True)

    def test_details(self):
        # get the home view
        response = self.client.get('/')      
        self.assertEqual(response.status_code, 200)

        # Check that the rendered context is not none 
        self.assertTrue(response.context['stores'] != None)

# self.assertEqual(login, True) --> login evals to False, raises the assertion
Run Code Online (Sandbox Code Playgroud)

dm0*_*514 22

应该创建一个测试用户.就像是:

  def setUp(self):
    self.client = Client()
    self.username = 'agconti'
    self.email = 'test@test.com'
    self.password = 'test'        
    self.test_user = User.objects.create_user(self.username, self.email, self.password)
    login = self.client.login(username=self.username, password=self.password)
    self.assertEqual(login, True)
Run Code Online (Sandbox Code Playgroud)

在你的shell测试中,用户可能已经存在于你的数据库中,而在你的unittest中可能没有用户......