这是恢复模拟功能的Jest方法

Dej*_*eff 24 javascript testing mocking jestjs

在Sinon的存根中,恢复功能非常容易.

const stub = sinon.stub(fs,"writeFile",()=>{})
...
fs.writeFile.restore()
Run Code Online (Sandbox Code Playgroud)

我期待与Jest做同样的事情.我得到的最近的是这个丑陋的代码:

const fsWriteFileHolder = fs.writeFile
fs.writeFile = jest.fn()
...
fs.writeFile = fsWriteFileHolder 
Run Code Online (Sandbox Code Playgroud)

Dej*_*eff 24

最后,由于@ nbkhope的贡献,我找到了一个可行的解决方案.

所以下面的代码按预期工作,即它嘲笑代码然后恢复原始行为:

const spy = jest.spyOn(
    fs,
    'writeFile' 
  ).mockImplementation((filePath,data) => {
  ...
})
...
spy.mockRestore()
Run Code Online (Sandbox Code Playgroud)


nbk*_*ope 15

如果要清除对mock函数的所有调用,可以使用:

const myMock = jest.fn();
// ...
myMock.mockClear();
Run Code Online (Sandbox Code Playgroud)

清除存储在模拟中的所有内容,请尝试:

myMock.mockReset();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的澄清.是的,我的解决方案表现得很好.我唯一的麻烦是,如果在这种情况下可以使用Jest的恢复功能,代码看起来会更好. (3认同)
  • 谢谢你的建议,但是没有成功。看来我不得不接受我最初的丑陋的解决方案。 (2认同)