Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在GAE中对基于NDB的烧瓶应用程序进行单元测试时发生put()抛出错误_Python_Google App Engine_Google Cloud Datastore_Flask_Nose - Fatal编程技术网

Python 在GAE中对基于NDB的烧瓶应用程序进行单元测试时发生put()抛出错误

Python 在GAE中对基于NDB的烧瓶应用程序进行单元测试时发生put()抛出错误,python,google-app-engine,google-cloud-datastore,flask,nose,Python,Google App Engine,Google Cloud Datastore,Flask,Nose,我正在单元测试用例中创建用户配置文件并试图保存它。代码如下: def create_user(self, email, user_id, is_admin=False): self.testbed.setup_env( USER_EMAIL = email, USER_ID = user_id, USER_IS_ADMIN = '1' if is_admin else '0', overwrite = True)

我正在单元测试用例中创建用户配置文件并试图保存它。代码如下:

def create_user(self, email, user_id, is_admin=False):

    self.testbed.setup_env(
        USER_EMAIL = email,
        USER_ID = user_id,
        USER_IS_ADMIN = '1' if is_admin else '0',
        overwrite = True)
    user = users.get_current_user()
    print "user:", user
    u = UserProf( id=str(user.user_id()),
                  nickname = "Test",
                  email_address = user.email() )
    u.put()
我在执行测试用例时调用此函数,如下所示:

def test_users(self):

    self.create_user('test@example.com', '123', True)
    result = self.app('/users/')
    self.assertTrue("Test" in result)
u、 put()导致了问题。错误:

BadKeyError:实体键与数据存储返回的键不同。预期键('UserProf','123'),获取键('UserProf','123'))

完整的stacktrace,它很大:

我在网上没有发现任何与这个错误有关的东西。除了一个,他还报告了同样的问题:

谢谢

更新:添加了UserProf的模型类

class UserProf(ndb.Model):

    nickname = ndb.StringProperty(required=True)
    email_address = ndb.StringProperty(required=True)
    is_admin = ndb.BooleanProperty()
    teams = ndb.KeyProperty(repeated=True)
    is_manager = ndb.BooleanProperty()

在过去的几个小时里,我也遇到了同样的问题,最后我用nose gae和这个bug问题中指出的“无沙盒”标志运行了我的测试


我意识到这是一个老问题,但我想我会发表这篇文章,以防它可能会帮助其他人使用此错误来测试ndb。

您必须为要在单元测试中使用的服务(包括数据存储)启用存根

类DemoTestCase(unittest.TestCase):
def设置(自):
#首先,创建Testbed类的实例。
self.testbed=testbed.testbed()
#然后激活测试台,它准备好服务存根以供使用。
self.testbed.activate()
#接下来,声明要使用的服务存根。
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()

请发布您的型号代码好吗?@codegeek:用型号代码更新了问题。您的型号中的用户ID在哪里?我看不出来。我猜您正在创建一个UserProf,userid作为字符串,而它应该是一个整数?id是user_id。在NDB中,我们可以使用'id'存储字符串或整数。我刚刚在本地开发服务器的交互式控制台中测试过,它工作得很好。当通过单元测试用例完成时,它不起作用。