嘲讽整个模块时,你得到的实际功能

时间:2019-02-02 12:35:47

标签: javascript node.js jestjs

我使用jest.genMockFromModule('winston');嘲笑了第三方库 从这一点开始,无论我需要winston到哪里,如果我console.log(winston),模拟函数也都将出现。但是,它应该只进来测试用例文件只。

我在这里做什么错了?

__mocks__
   winston.js
const winston = jest.genMockFromModule('winston');

logger.js

const winston = require('winston')

console.log(winston) // object consist of mockFunctions

1 个答案:

答案 0 :(得分:0)

  

我需要winston的任何地方,如果我console.log(winston),模拟功能也将出现

您通过创建__mocks__/winston.js创建了Manual mock for a Node module,这意味着winston“将被自动嘲笑”。

请注意,mocking a Node module的行为与mocking a user module或模拟核心Node模块不同,因为该模块是自动模拟并调用{{1} }不是必需的。

换句话说,由于jest.mock存在,该模拟将在测试期间运行的代码的 any 中从__mocks__/winston.js自动返回


  

我已经使用require('winston')嘲笑了第三方库

在这种情况下,无需调用jest.genMockFromModule,因为jest.genMockFromModule('winston');是自动模拟的。

实际上,调用winston最终使用了要求jest.genMockFromModule返回的模块的“自动模拟系统来生成模拟版本”,最终成为了winston上的模拟对象

换句话说,在这种情况下,__mocks__/winston.js最终返回了手动模拟的自动模拟。


  

我在这里做什么错了?

jest.genMockFromModule('winston');将返回__mocks__/winston.js处的模拟。

要在测试期间使用实际模块,请使用jest.requireActual

require('winston')

注意:

  • const winstonMock = require('winston'); // this will return the mock const winston = jest.requireActual('winston'); // this will return the actual module 已在版本21.0.0中添加
  • jest.requireActual 在Node模块上无法正常工作,直到PR 7404版的24.0.0
  • 修复该问题为止。