【发布时间】: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