【发布时间】:2021-11-09 02:54:36
【问题描述】:
我有一个导出为函数的外部库,在Stub documentation 它只接受第一个参数作为对象和第二个参数作为方法的输入,所以我如何存根导出为在 Node ES Modules 环境中运行(没有 Commonjs)?
(在我的具体情况下,我使用了一个使用互联网工作的库,我想在不访问互联网的情况下测试派生函数,所以我想存根外部函数库)
尝试:
- 我不能使用像 proxyquire 这样的解决方案,因为它是基于
require和module cache deletion的解决方案,Node 的 ES 模块不支持这些解决方案。 - 我不想用proxyquire-universal,因为它模拟了
require在普通ES中的操作,而且它只是整个项目中我想测试的一个函数,我正在寻找一个更简单的解决方案李> - 更改导入模式不起作用,因为它不像
babel那样重新编译,所以即使我导入为import * as obj from 'lib',也只会更改函数名称
我的错误环境有 3 个文件:
例如一个名为“sum”的外部库,我不想更改,导出如下:
外部库:externalSum.js
module.exports = function sum(a, b){ console.log(">>>>> running without stub <<<<<") return a + b }这个库在名为 mathProblems 的项目文件中间使用
内部文件:mathProblems.js
import sum from 'externalSum' export function sumMore1(a) { return sum(a, 1); }我有一个测试文件
内部文件:spec.js
import sinon from 'sinon' import assert from 'assert' import sumObj from 'externalSum' import { sumMore1 } from '../mathProblems.js' describe('sumMore1 is working', () => { it('sumMore1 test', () => { const sum_stub = sinon.stub(sumObj) // NOT STUBBING sum_stub.withArgs(1, 1).returns(2) // NOT STUBBING const result = sumMore1(1) assert.strictEqual(result, 2) }); });
【问题讨论】:
标签: node.js mocha.js sinon es6-modules stub