我在尝试保存Django User模型实例时遇到TransactionManagementError,并在其post_save信号中,我保存了一些将用户作为外键的模型.
在使用信号时,上下文和错误与此问题django TransactionManagementError非常相似
但是,在这种情况下,错误仅在单元测试时发生.
它在手动测试中运行良好,但单元测试失败.
有什么我想念的吗?
以下是代码段:
views.py
@csrf_exempt
def mobileRegister(request):
if request.method == 'GET':
response = {"error": "GET request not accepted!!"}
return HttpResponse(json.dumps(response), content_type="application/json",status=500)
elif request.method == 'POST':
postdata = json.loads(request.body)
try:
# Get POST data which is to be used to save the user
username = postdata.get('phone')
password = postdata.get('password')
email = postdata.get('email',"")
first_name = postdata.get('first_name',"")
last_name = postdata.get('last_name',"")
user = User(username=username, email=email,
first_name=first_name, last_name=last_name)
user._company = postdata.get('company',None)
user._country_code = postdata.get('country_code',"+91")
user.is_verified=True …Run Code Online (Sandbox Code Playgroud) Python文档unittest意味着该assertRaises()方法可以用作上下文管理器.下面的代码给出了一个Python文档中单元测试的简单示例.方法中的assertRaises()调用testsample()工作正常.
现在我想在引发异常的时候访问它,但是如果我将它注释掉,而是取消注释我尝试使用上下文管理器的下一个块,那么AttributeError: __exit__当我尝试执行代码时,我会得到一个.这适用于Python 2.7.2和3.2.2.我可以在try...except块中捕获异常并以这种方式访问它,但unittest的文档似乎暗示上下文管理器也会这样做.
还有别的我在这里做错了吗?
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.seq = [x for x in range(10)]
def testshuffle(self):
# make sure the shuffled sequence does not lose any elements
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq, [x for x in range(10)])
def testchoice(self):
element = random.choice(self.seq)
self.assert_(element in self.seq)
def testsample(self):
self.assertRaises(ValueError, random.sample, self.seq, 20)
# with self.assertRaises(ValueError, random.sample, self.seq, 20):
# print("Inside cm")
for element in random.sample(self.seq, 5):
self.assert_(element in self.seq) …Run Code Online (Sandbox Code Playgroud)