Ich möchte in der Lage sein, in Tests zu behaupten, dass mein Code Model.put()
für die Entitäten, die geändert wurden, aufgerufen wurde. Leider scheint es einige Caching los, so dass dieser Code zu:Wie aktualisiere ich eine NDB-Entität aus dem Datenspeicher?
from google.appengine.ext import ndb
class MyModel(ndb.Model):
name = StringProperty(indexed=True)
text = StringProperty()
def update_entity(id, text):
entity = MyModel.get_by_id(id)
entity.text = text
# This is where entity.put() should happen but doesn't
diesen Test:
def test_updates_entity_in_datastore(unittest.TestCase):
name = 'Beartato'
entity = MyModel(id=12345L, name=name, text=None)
text = 'foo bar baz'
update_entity(entity.key.id(), text)
new_entity = entity.key.get() # Doesn't do anything, apparently
# new_entity = entity.query(MyModel.name == name).fetch()[0] # Same
assert new_entity.text == text
Wenn ich würde wirklich lieber es nicht, da in der realen Welt, update_entity
wird tatsächlich nichts im Datenspeicher ändern.
Verwenden von Nose, datastore_v3_stub und memcache_stub.
Bearbeitet die Frage zu klären - versucht, dass es nichts ändert. – brandones
Ich denke, es könnte sein, weil Sie explizit eine ID festlegen und der Stub irgendwie die Entität in den Cache versetzt? Wenn Sie die ID nicht festlegen, sollte der Schlüssel Keine sein. – Nabla