小编Rus*_*sev的帖子

开玩笑和测试 require.resolve 调用

我想require.resolve在 jest 测试套件中模拟节点的内置函数。这是一个关于 repl.it和代码本身的问题的工作示例:

测试对象(例如):

const requirer = () => {
  try {
    return require.resolve('./add')
  } catch (error) {
    console.error('failed to find a module')
  }
}

module.exports = requirer
Run Code Online (Sandbox Code Playgroud)

测试套件:

const requirer = require('./requirer')

describe('attempt to mock require.resolve', () => {
   it('does not work', () => {
     require.resolve = jest.fn(arg => `./${arg}`)
     console.log(
       'is require.resolve mocked',
       jest.isMockFunction(require.resolve)) // will say true

     requirer()

     expect(require.resolve).toHaveBeenCalledTimes(1)
     expect(require.resolve).toBeCalledWith('')
  })
})
Run Code Online (Sandbox Code Playgroud)

在测试套件声明中,一切正常(参见 a 的输出jest.isMockFunction(require.resolve))并且模拟工作正常。但是对于测试对象require.resolve仍然具有原始功能。

由于这个问题,这不是纯粹的单元测试。

例如,如果我模拟process.exit …

unit-testing mocking node.js jestjs

6
推荐指数
1
解决办法
843
查看次数

标签 统计

jestjs ×1

mocking ×1

node.js ×1

unit-testing ×1