Node.js 重写fs函数

Node.js 重写fs函数,node.js,mocking,cypress,fs,stub,Node.js,Mocking,Cypress,Fs,Stub,我正在用Cypress做一些E2E测试 因为它不支持节点函数,比如来自fs的函数,所以我对它们进行了如下模拟 在我的测试文件中: window.Cypress.fs = require('fs') window.Cypress.fs.existsSync = () => { return true // custom return } window.Cypress.fs.lstatSync = () => { // custom return } 但现在我得到了一些错误: fs.l

我正在用Cypress做一些E2E测试

因为它不支持节点函数,比如来自
fs
的函数,所以我对它们进行了如下模拟

在我的测试文件中:

window.Cypress.fs = require('fs')
window.Cypress.fs.existsSync = () => { return true // custom return }
window.Cypress.fs.lstatSync = () => { // custom return }
但现在我得到了一些错误:

fs.lstatSync(...).isFile is not a function
如何重写/mock/stub
isFile()

我试着做:

window.Cypress.fs.lstatSync.isFile = () => { return true }
//and
window.Cypress.fs.lstatSync().isFile = () => { return true }
但它不起作用

以下是我的源代码(不是模拟代码):


有什么想法吗???

您需要模仿,至少是它的.isFile()方法,来做您想做的事情。fs.lstatSync返回fs.Stats的实例。

由于执行
lstatSync()
然后使用其结果,因此需要编写:

window.Cypress.fs.lstatSync=()=>{
返回{
isFile(){return true}
}
}

您是否尝试过
window.Cypress.fs.lstatSync=()=>{return{isFile(){return true}}}}
?@ManuelSpigolon-omg谢谢,这很有效!我怎么会错过这个?!你能把这个作为答案贴出来让我接受吗?非常感谢。
return fs.lstatSync(filePath).isFile()