我已经 stub 了文件的内容,因此我只能运行外部函数
文件.html
<body onload ="test('file.txt')">
<body>
file.js
const fs1 = require('fs');
let param;
module.export = {
test,
test1,
param
}
function test (outputParam) {
let fileData = test1(outputParam);
param = fileData;
}
function test1(outputParam) {
let data = fs1.readFileSync(outputParam);
return data;
}
正如您所见,我从 html onload 加载函数测试,然后 test1 调用并读取文件,我已 stub 此文件内容,如下面的测试所示
当我运行测试时,我想查看变量 param 具有文件内容值
test.spec.js
let sinon = require("sinon");
let filejs = require('./file.js');
it('should run only the outer function' ,function() {
// I try to stub my function here
sinon.stub(filejs,'test1').callsFake ((someArg) => {
return "this is my file content";
});
// Now I will call my test function
filejs.test(someArg);
})
正如您在上面看到的,我已经 stub 了函数 test1,但是当我运行测试时,我看到 test1 被调用并且它读取真实的文件。
我正在使用 mocha ,我对 stub 或模拟概念很陌生,非常感谢任何建议。
最佳答案
您可能应该尝试 stub readFileSync
。
const fs = require('fs');
// ...
sinon.stub(fs, "readFileSync").callsFake ((someArg) => {
return "this is my file content";
});
除此之外,我还可以发现您的代码存在两个问题。
real
readFileSync
将返回Buffer
如果调用时没有第二个参数,则不是像 stub 那样的字符串。body onload 事件仅存在于 DOM 内部。
fs
模块仅在 Node.js 中可用。如果您在浏览器中运行代码,您将无法使用fs.readFileSync
。如果您在 Node 中运行它,您的 HTML 文件和 onload 事件将没有用处。
关于javascript - 在 stub 函数之后它仍然调用真正的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60297654/