我如何使用sinon存根函数为neo4j Thingdom模块
How can i use sinon to stub functions for neo4j Thingdom module
我在写一些单元测试时遇到了一些问题,我想把neo4j Thingdom模块的功能存根。
经过几个小时的失败尝试,我一直在网上搜索,我发现的唯一参考点是一个样本项目,用于sinon.createStubInstance(neo4j.GraphDatabase);把整个物体掐灭。给我,因为这似乎是一个扔掉项目我希望更细粒度的方法可以测试,例如Thingdom API概述在保存一个节点创建它时(非持久化)持续下去,然后你可以如果你希望指数三个电话和可以列出多个特定的测试,我不确定可以实现的createStubInstance设置(即发现如果一个函数被称为一次)。
示例"create node"函数(这只是为了说明该函数,我正在尝试使用测试构建它)
User.create = function(data, next){
var node = db.createNode(data);
node.save(function(err, node){
next(null,node);
});
};
我能够存根函数的顶层对象(neo4j.GraphDatabase),所以这工作:
it('should create a node for persistence', function(){
var stub = sinon.stub(neo4j.GraphDatabase.prototype, 'createNode');
User.create({}, res);
stub.calledOnce.should.be.ok;
stub.restore();
});
问题出现在我希望运行的下一组测试中,如果调用将节点持久化到数据库的调用(节点,保存)方法:
我不确定这是否可能或者它可以实现,但我已经尝试了存根的几个变体,似乎不工作(在neo4j上)。Node, neo4j.Node.prototype),他们都返回不同的错误,如不能包装未定义等,这可能是由于createNode函数生成节点,而不是我的代码直接。
是否有什么我明显做错了,我错过了技巧,或者你可以不这样做?如果不是,那么处理这种情况的最佳策略是什么?
一个可能的解决方案是返回一个存根或模拟对象,让您控制节点创建后发生的事情:
it('should create a node for persistence and call save', function () {
var stubbedNode = {
save: sinon.stub().yields(undefined, stubbedNode)
};
var stub = sinon.stub(neo4j.GraphDatabase.prototype, 'createNode').returns(stubbedNode);
User.create({}, res);
stub.calledOnce.should.be.ok;
stub.restore();
stubbedNode.save.calledOnce.should.be.ok;
});
我们不能直接这样做,模块的设置方式不能很好地与Sinon一起工作。我们所做的只是简单地将模块抽象出来,并将其包装在一个简单的facade/适配器中,以便我们能够在单元测试中存根。
由于我们没有做任何事情,在该类中调用neo4j模块,我们正在集成(并将在回归测试时验证)测试该部分,以确保我们击中neo4j数据库。
- Neo4j结果(JSON格式)创建D3树图
- 是否有一种基于“查询”来查询Neo4j中的节点的方法;dateProperty”;
- 如何在带有JQuery的Neo4j 2.2.x中使用事务Cypher HTTP端点和新的REST API身份验证和授权
- Neo4j插入具有各种关系的节点
- 从Node.js查询Neo4j时看不到任何回调
- 从Node.js在Neo4j中引入大量数据时出错
- 从MySQL导出到Neo4j
- node.js 找不到 'neo4j' 模块 (Thingdom)
- 如何通过javascript REST客户端处理Neo4j服务器中的索引
- 为什么我与neo4j的连接不起作用(通过Javascript)
- 我可以使用javascript变量来查询Neo4j吗?
- 如何将 neo4j 查询打印到控制台?(Javascript)
- Javascript 中的 Neo4j:未放入查询的参数
- 使用 neo4j-nodejs API 在 neo4j 中创建关系
- Neo4j REST 返回节点,但不返回关系
- 重复的节点创建了neo4j和nodejs
- 在Neo4j API中阻止了交叉原始请求
- 是否可以使用neo4j中的默认图形
- 如何在JavaScript客户端代码中保护用户凭据(在Neo4J中保持)
- 我如何使用sinon存根函数为neo4j Thingdom模块