gpt4 book ai didi

javascript - 在 stub 函数之后它仍然调用真正的函数

转载 作者:行者123 更新时间:2023-12-02 21:44:21 25 4
gpt4 key购买 nike

我已经 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com