开玩笑总是叫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')
})
})
看起来应该可行:
pg-promise
库 return 是 return postgres
函数 的默认函数
postgres(connection)
被调用 "url"
并且 return 是一个模拟的 { one: async () => 'query' }
postgres(connection).one(...)
被调用
但开玩笑说 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 | })
- `postgres(
我不知道为什么这会破坏测试,但我通过更改 npm run test
脚本修复了它:
之前:
// package.json
"test": "jest --resetMocks --forceExit",
之后:
// package.json
"test": "jest", // everything passes, my test works
我是一个开玩笑的测试菜鸟,但我正在尝试模拟一些简单的默认函数。
另请注意:此代码在测试套件
之外的产品运行中工作得非常好// 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')
})
})
看起来应该可行:
pg-promise
库 return 是 returnpostgres
函数 的默认函数
postgres(connection)
被调用"url"
并且 return 是一个模拟的{ one: async () => 'query' }
postgres(connection).one(...)
被调用
但开玩笑说 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 | })
- `postgres(
我不知道为什么这会破坏测试,但我通过更改 npm run test
脚本修复了它:
之前:
// package.json
"test": "jest --resetMocks --forceExit",
之后:
// package.json
"test": "jest", // everything passes, my test works