1

私は、変更されたエンティティのコードがModel.put()であることをテストでアサートできるようにしたいと思います。 、データストアからNDBエンティティをリフレッシュするにはどうすればよいですか?

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 

私は本当にむしろ、それは現実の世界であるため、しませんでしたでしょう時:

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 

渡し、このテスト:残念ながら、このコードように起こっていくつかのキャッシング、があるように思われますupdate_entityは実際にデータストア内の何も変更しません。

Nose、datastore_v3_stub、memcache_stubを使用しています。

答えて

4

あなたは、このようにキャッシュをバイパスすることができます。

entity = key.get(use_cache=False, use_memcache=False)

これらのオプションは、NDBのcontext optionsからです。それらはModel.get_by_id(),Model.query().fetch()およびModel.query().get()にも適用できます。

0

現在のテストでは、エンティティの "ローカル"メモリ内バージョン(データストアの内容に関係なく)が検証されます。あなたのチェックの前にNDBからエンティティを再フェッチする必要があります

new_entity = entity.key.get() 
assert [...] 
+0

質問を編集して、何も変更しませんでした。 – brandones

+0

私はあなたが明示的にIDを設定していてスタブが何とかエンティティをキャッシュに入れているからかもしれないと思いますか? IDを設定しない場合、[Key]は[None]にする必要があります。 – Nabla

関連する問題