【问题标题】:Node.js: how to use proxyquire for replacing neo4j-driver dependencyNode.js:如何使用 proxyquire 替换 neo4j-driver 依赖项
【发布时间】:2017-03-28 20:22:08
【问题描述】:

我必须对 proxyquire 的工作原理或做错了什么有一些基本的理解。

为了概念证明,我在 node.js 中将这个原始代码连接到 neo4j graphnedb:

// I am lib/neo4j.js    
var neo4j = require('neo4j-driver').v1;

var graphenedbURL = process.env.GRAPHENEDB_BOLT_URL;
var graphenedbUser = process.env.GRAPHENEDB_BOLT_USER;
var graphenedbPass = process.env.GRAPHENEDB_BOLT_PASSWORD;

var driver = neo4j.driver(graphenedbURL, neo4j.auth.basic(graphenedbUser, graphenedbPass));

然后我有这个测试:

// I am test/neo4j.test.js
'use strict';
const test = require('tap').test;
const proxy = require('proxyquire');
const sinon = require('sinon');

test('Testing connection to Neo4j', (assert) => {
    const driverStub = sinon.stub();
    const testedModule = proxy('../lib/neo4j', {
         'neo4j': {
            'driver': driverStub,
          },
      });
});

测试运行为 npm tap test/*.test.js --conv

因为 npm 不为 heroku graphnedb 提供对 .env 的访问权限,所以驱动程序不会有任何应该没问题的 process.env 连接变量,因为我的期望是 proxyquire 将用上面定义的存根替换驱动程序,但这并没有发生,并且测试在 neo4j.driver 缺少 graphnedebURL 上失败。请问我做错了什么?

【问题讨论】:

  • const testingModule = proxy('../lib/neo4j', { 'neo4j-driver': { 'v1': { driver: driverStub }, }, });试试这个。
  • 是的,就是这样......我花了大约 6 个小时在这上面......我知道有人会让我感到迟钝 :D 无论如何,谢谢你的帮助。如果你把它作为一个独立的答案,我会很乐意批准它:)

标签: javascript node.js testing sinon


【解决方案1】:

您需要以与原始文件(包括 v1)相同的方式代理 neo4j。

 // I am test/neo4j.test.js
 'use strict';
 const test = require('tap').test;
 const proxy = require('proxyquire');
 const sinon = require('sinon');

 test('Testing connection to Neo4j', (assert) => {
    const driverStub = sinon.stub();
    const testedModule = proxy('../lib/neo4j', 
    { 
        'neo4j-driver': { 
            'v1': {
                driver: driverStub 
            },
        }, 
    });
 });

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2015-10-22
    • 2016-07-05
    • 2014-05-11
    • 1970-01-01
    • 2018-05-15
    • 2015-05-08
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多