Javascript 在stubing函数之后,它仍然调用实函数
我已经对文件的内容进行了存根,所以我只能运行外部函数 file.htmlJavascript 在stubing函数之后,它仍然调用实函数,javascript,unit-testing,mocha.js,Javascript,Unit Testing,Mocha.js,我已经对文件的内容进行了存根,所以我只能运行外部函数 file.html <body onload ="test('file.txt')"> <body> 正如您看到的,我从HTMLonLoad加载函数测试,然后test1调用并读取文件,我已经截取了这个文件的内容,如下面的测试所示 运行测试时,我希望看到变量param具有文件内容值 测试规范js let sinon = require("sinon"); let filejs = require('./
<body onload ="test('file.txt')">
<body>
正如您看到的,我从HTMLonLoad加载函数测试,然后test1调用并读取文件,我已经截取了这个文件的内容,如下面的测试所示
运行测试时,我希望看到变量param具有文件内容值
测试规范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);
})
正如您在上面所看到的,我使用了stubbed函数test1,但是当我运行测试时,我看到test1被调用,它读取真实的文件
我正在使用mocha,我不熟悉存根或模拟概念,任何建议都非常感谢。您可能应该尝试存根
readFileSync
const fs = require('fs');
// ...
sinon.stub(fs, "readFileSync").callsFake ((someArg) => {
return "this is my file content";
});
除此之外,我可以发现您的代码存在两个问题
- real
在调用时将返回一个if,而不使用第二个参数,而不是像存根那样的字符串readFileSync
- body onload事件仅存在于DOM内部。
模块仅在Node.js中可用。如果在浏览器中运行代码,将无法使用fs
。如果在节点中运行它,HTML文件和onload事件将不会有用fs.readFileSync
sinon.stub()
只能影响导出对象的属性,但是test()
函数直接调用内部函数test1()
sinon.stub()
无法处理模块的内部结构。如果在节点中运行它,则HTML文件和onload事件将不会有用。您的意思是我应该将其作为node file.js运行。如果您正在为node编写应用程序,那么是的。如果你的应用程序是浏览器,还有其他方法来阅读我想的文件。你好,你有什么建议吗?
const fs = require('fs');
// ...
sinon.stub(fs, "readFileSync").callsFake ((someArg) => {
return "this is my file content";
});