相关疑难解决方法(0)

在django单元测试中使用用户模型的问题

我有以下django测试用例,它给了我错误:

class MyTesting(unittest.TestCase):
    def setUp(self):
        self.u1 = User.objects.create(username='user1')
        self.up1 = UserProfile.objects.create(user=self.u1)

    def testA(self):
        ...

    def testB(self):
        ...
Run Code Online (Sandbox Code Playgroud)

当我运行我的测试时,testA将成功通过但在testB启动之前,我收到以下错误:

IntegrityError: column username is not unique
Run Code Online (Sandbox Code Playgroud)

很明显,它试图self.u1在每个测试用例之前创建并发现它已经存在于数据库中.如何在每个测试用例之后正确清理它以便后续情况正确运行?

python django unit-testing django-testing

21
推荐指数
2
解决办法
1万
查看次数

django测试RequestFactory不包含request.user

每当我在测试期间使用requestFactory时:

from django.contrib.auth.models import User
from django.test import TestCase
from django.test.client import RequestFactory
from django.test.client import Client
import nose.tools as nt

class TestSomeTestCaseWithUser(TestCase):

    def setUp(self):
        # Every test needs access to the request factory.
        self.factory = RequestFactory()
        self.client = Client()
        self.user_foo = User.objects.create_user('foo', 'foo@bar.com', 'bar')

    def tearDown(self):
        # Delete those objects that are saved in setup
        self.user_foo.delete()

    def test_request_user(self):
        self.client.login( username='foo', password='bar')
        request = self.factory.post('/my/url/', {"somedata": "data"})
        nt.assert_equal(request.user,self.user_foo)
Run Code Online (Sandbox Code Playgroud)

在我尝试使用request.user的所有内容上:

AttributeError: 'dict' object has no attribute 'user'
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我添加了一个解决方法:

def test_request_user(self):
    # …
Run Code Online (Sandbox Code Playgroud)

testing django unit-testing request testcase

5
推荐指数
1
解决办法
5166
查看次数