Движок приложения Google: unitest работает, тестирование носа не проходит

Я написал этот простой код для проверки моей модели:

class NDBTestCase(unittest.TestCase):
    def setUp(self):
        logging.getLogger().setLevel(logging.INFO)
        # First, create an instance of the Testbed class.
        self.testbed = testbed.Testbed()
        # Then activate the testbed, which prepares the service stubs for use.
        self.testbed.activate()
        # Next, declare which service stubs you want to use.
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.owner = m_User(username="owner")
        self.owner.put()


    def tearDown(self):
        self.testbed.deactivate()


    def testClub(self):
        # this id is a manually assigned
        club = m_Club(id="1", name="test", email="test@test.com", description="desc", url="example.com",
                      owners=[self.owner.key], training_type=["balance", "stability"], tags=["test", "trento"])
        club.put()

в моделях owners это так owners = ndb.KeyProperty(kind="User", repeated=True)

если я запускаю этот код с unittest, он работает отлично. Я пытался запустить его с unitest а также nosegae и это не удается из-за проблемы с Key

Traceback (most recent call last):
  File "/Users/stefano/Documents/SW/gymcentral/tester_ndb.py", line 25, in setUp
    self.owner.put()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3379, in _put
    return self._put_async(**ctx_options).get_result()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
    self.check_success()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/context.py", line 810, in put
    key = yield self._put_batcher.add(entity, options)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/tasklets.py", line 371, in _help_tasklet_along
    value = gen.send(val)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/context.py", line 350, in _put_tasklet
    ent._key = key
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1363, in __set__
    self._set_value(entity, value)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1513, in _set_value
    value = _validate_key(value, entity=entity)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1481, in _validate_key
    raise datastore_errors.BadValueError('Expected Key, got %r' % value)
BadValueError: Expected Key, got Key('User', 1)

есть идеи почему? я запускаю тест с консоли с помощью этой команды nosetests tester_ndb.py --with-gae

2 ответа

Решение

Не могли бы вы попробовать насморк с флагом --without-sandbox?

Кажется, на прежнем трекере есть старая проблема, связанная с тем же.

https://code.google.com/p/nose-gae/issues/detail?id=60

Недавно я взял на себя поддержку NoseGAE, поэтому я также рассмотрю основную причину, но я предполагаю, что это что-то внутреннее в SDK App Engine.

РЕДАКТИРОВАТЬ: --without-sandbox был удален в NoseGAE 0.4.0, когда я перенес его в dev_appserver2

Я тоже получил странные ошибки, как это. Я думаю, что где-то есть ошибка в коде Google. Я справился с этим, настроив свой код, чтобы сделать то же самое немного по-другому.

Попробуйте изменить

self.owner.put()

в

ndb.put(self.owner)
Другие вопросы по тегам