【发布时间】:2013-05-23 14:35:52
【问题描述】:
我在编写一些单元测试时遇到了一些问题,我想在其中删除 neo4j Thingdom 模块的功能。
经过几个小时的失败尝试后,我一直在网上搜索,我发现的唯一参考点是一个示例项目,该项目用于 sinon.createStubInstance(neo4j.GraphDatabase);将整个对象存根。对我来说,因为这似乎是一个丢弃的项目,所以我想要一个更细粒度的方法,所以我可以测试它,例如保存节点时的 Thingdom API 概述,你创建它(非持久化)持久化它然后你可以如果您愿意,可以索引它是三个调用,并且可以在多个特定测试中进行概述,我不确定是否可以通过 createStubInstance 设置来实现(即确定是否调用了一次函数)。
示例“创建节点”功能(这只是为了说明功能,我正在尝试使用测试来构建它)
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 函数生成节点而不是我的代码直接。
有什么我明显做错了,我错过了诀窍还是你不能这样做?如果不是,那么处理此类事情的最佳策略是什么?
【问题讨论】:
标签: javascript node.js sinon