开玩笑总是叫0次

jest always called 0 times

我是一个开玩笑的测试菜鸟,但我正在尝试模拟一些简单的默认函数。

另请注意:此代码在测试套件

之外的产品运行中工作得非常好
// I am testing this simple util function:
import postgreSQL from 'pg-promise'

const postgres = postgreSQL({
  // Initialization Options here...
})


const connection = `url`

export default postgres(connection)

我想我正在测试它的正确性:

const postgres = jest.fn().mockImplementation(() => ({
  one: async () => 'query'
}))

jest.mock('pg-promise', () => {
  return {
    __esModule: true,
    default: () => postgres // jest.fn().mockImplementation(() => postgres)
  }
})

// file being tested
import connectDb from './connection'

describe('Database Connection', () => {
  beforeEach(() => {
    //
  })

  afterEach(() => {
    jest.restoreAllMocks()
  })

  it('should call connection with url', async () => {
    let error = ''

    try {
      // file being tested
      await connectDb.one('SELECT * from accounts LIMIT 1;')
    } catch (err) {
      error = err.message
    }

    expect(error).toEqual('')
    expect(postgres).toHaveBeenCalledWith('url')
  })
})

看起来应该可行:

但开玩笑说 postgres(connection) 永远不会发生:

    expect(jest.fn()).toHaveBeenCalledWith(...expected)

    Expected: "url"

    Number of calls: 0

      46 |
      47 |     expect(error).toEqual('')
    > 48 |     expect(postgres).toHaveBeenCalledWith('url')
         |                      ^
      49 |   })
      50 | })

我不知道为什么这会破坏测试,但我通过更改 npm run test 脚本修复了它:

之前:

// package.json
"test": "jest --resetMocks --forceExit",

之后:

// package.json
"test": "jest", // everything passes, my test works