覆盖 fs 函数

Override fs functions

我正在使用 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

我怎样才能override/mock/stubisFile()

我试过:

window.Cypress.fs.lstatSync.isFile = () => { return true }
//and
window.Cypress.fs.lstatSync().isFile = () => { return true }

但是没用。

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

return fs.lstatSync(filePath).isFile()

有什么想法吗??

您需要模拟 fs.Stats class 并且至少需要模拟它的 .isFile() 方法才能执行您想要的操作。 fs.lstatSync returns fs.Stats 的实例。

由于你执行lstatSync()然后使用它的结果,你需要这样写:

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