neo4j功能&单元测试 - 重置数据库

时间:2015-07-15 14:12:38

标签: unit-testing neo4j

我在node.js中创建了一个应用程序,并使用Mocha测试来执行自动单元和功能测试。

我现在正在尝试测试数据库功能,并希望在每次测试之间重置数据库以保持一致性。

解决方案1 ​​

在每次测试之前我都在运行:

MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r

然后使用neo4j-shell dump命令获取的cyphers查询填充数据库。但是,这个问题是那些cypher查询利用内部neo4j id在节点和关系之间创建链接,并且因为上面的删除查询没有将内部neo4j id计数器重置为0,所以当你尝试运行时它都会出错它!

解决方案2

然后我查看了物理关闭neo4j服务器,删除数据库目录,然后重新启动它并填充它。这可行,但需要大约15秒,这在我运行200多个单元测试时没用!

解决方案3

我还查看了事务,以便在测试完成后能够回滚数据库,但似乎所有查询都必须通过事务端点。我认为这不可行。

还有其他方法吗?我认为解决方案1显示了最大的承诺,但它意味着要通过并更改我所有导出的密码查询以避免使用内部neo4j ID。

例如,我必须改变:

create (_113:`User` {`firstname`:"John", `lastname`:"Smith",  `uuid`:"f843c210-26e3-11e5-af31-297c662c0848"})
create (_114:`Instrument` {`name`:"Drums", `uuid`:"f84521a0-26e3-11e5-af31-297c662c0848"})
create _113-[:`PLAYS`]->_114

要:

create (_113:`User` {`firstname`:"John", `lastname`:"Smith",  `uuid`:"f843c210-26e3-11e5-af31-297c662c0848"})
create (_114:`Instrument` {`name`:"Drums", `uuid`:"f84521a0-26e3-11e5-af31-297c662c0848"})
MATCH (a:User),(b:Instrument) WHERE a.uuid = 'f843c210-26e3-11e5-af31-297c662c0848' AND b.uuid = 'f84521a0-26e3-11e5-af31-297c662c0848' CREATE UNIQUE (a)-[r:`PLAYS`]->(b) RETURN r

对于大型数据集来说真是太痛苦了。

有什么想法吗?

0 个答案:

没有答案