我遇到了一个非常令人困惑的问题。
我为我的一个对象编写了一个unittest,其中包含2个测试用例:
# coding=utf-8
import unittest
from unittests.helper_functions import *
fix = {}
... Test Data is initialized here
check_if_test_bucket_is_used()
check_if_cb_credentials_are_set()
print "Flushing Bucket"
flush_test_bucket(CB_HOST, CB_USER, CB_PASS)
print "Starting Tests"
create_admin_user()
def testD_post_vehicle_by_driver(self):
res_vehicle = post_data('/drivers/vehicles', valid_vehicle_0, auth_obj=None,
headers={'Authorization': 'WebAuth %s' % fix['token'],
'Content-Type': 'application/json',
'Accept': 'application/json'})
driver = cb_find_by_key(valid_driver_0_key)
self.assertIn(valid_obj_0_key, driver[MISSING_KEY])
print driver
def testE_get_vehicle_by_driver(self):
res_single_vehicle = get_data('/vehicles/12345', auth_obj=None,
headers={'Authorization': 'WebAuth %s' % fix['token'],
'Content-Type': 'application/json',
'Accept': 'application/json'})
在testD
和testE
之间,密钥MISSING_KEY
从我的数据库对象中消失。
因此,当我在testD
中打印我的驱动程序对象时,仍然有一个值。并且在testE
之前,即使在我之前发布此车辆的请求之前,Couchbase中的值已经为null
。
django视图如下:
def post(self, request):
data = request.data
driver = request.user.details
vehicle = self.vehicle_bo.create_vehicle_by_driver(data, driver[m.ID])
return content_response(vehicle, VehicleModel, request, status_code=status.HTTP_201_CREATED)
我在返回时设置了一个断点,此时,db中的值仍然是正确的。
函数content_response
:
def content_response(response_obj, parser_class, request, status_code=status.HTTP_200_OK,
obj_modification_function=None, default='{}'):
if response_obj is None:
return default
# some json manipulation
response = Response(prepared_obj, status=status_code, headers=get_headers(request))
return response
此处返回时,值仍然保持不变。
从这一点来说,就我所理解的而言,一切都是由rest_framework的响应处理的,根本不应该进行任何db操作。
任何想法,这可以来自哪里?
进一步的信息:
答案 0 :(得分:0)
这有点不清楚,但听起来你正在启动一个桶上的刷新操作然后立即尝试使用它。
在刷新操作时要记住的一件事是,它是一个异步事件,可能需要一些时间才能完成 - 特别是如果你使用Couchbase Buckets需要时间来清理它磁盘上的数据。一般来说,您可以从删除桶中找到更可靠的行为并重新创建它。这可以使用Python SDK中的administrative API来完成。