【问题标题】:How can i use sinon to stub functions for neo4j Thingdom module我如何使用 sinon 为 neo4j Thingdom 模块存根函数
【发布时间】: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


    【解决方案1】:

    一个可能的解决方案是返回一个存根或模拟对象,让您控制节点创建后发生的事情:

    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;
    });
    

    【讨论】:

      【解决方案2】:

      我们不能直接这样做,模块的设置方式不能很好地与Sinon一起工作。我们所做的只是将模块抽象出来并将其包装在一个简单的外观/适配器中,我们可以在我们的单元测试中存根。

      由于除了在该类中调用 neo4j 模块之外我们没有做任何事情,因此我们正在集成(并将在回归测试时验证)测试该部分以确保我们正在访问 neo4j 数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-24
        • 2016-05-11
        • 2021-01-24
        • 2021-11-27
        • 2020-07-23
        • 2019-04-03
        • 2018-06-15
        • 1970-01-01
        相关资源
        最近更新 更多