Предположим, у меня есть index.ts
, который будет импортировать Database.ts
и выполнить несколько запросов. Чтобы проверить этот index.ts
файл, я хочу высмеять Database.ts
, потому что я не хочу подключаться к какой-либо реальной базе данных.
Это мой index.ts
:
import { connect } from './Database'
export async function runSomeQuery() {
const connection = await connect()
const result = await connection.query('SOME QUERY')
return result
}
а вот макет базы данных (__mocks__/Database.ts
)
const mockConnection = {
query: jest.fn()
}
export const connect = jest.fn(
() => Promise.resolve(mockConnection)
)
export function __getMockConnection() {
return mockConnection
}
вы можете видеть, что я выставляю __getMockConnection
, чтобы я мог получить mockConnection
в моих тестах (index.spec.ts
) (этот шаблон взят из официального документа ):
import { connect, __getMockConnection } from '../Database'
// ^^^^ getting type error here
import { runSomeQuery } from '../index'
jest.mock('../Database')
test('runSomeQuery', async () => {
await runSomeQuery()
const mockConnection = __getMockConnection()
expect(connect).toBeCalled()
expect(mockConnection.query).toBeCalledWith('SOME QUERY')
expect(mockConnection.query).toBeCalledWith('SOME QUERY')
})
Тестовый пример проходит, как и ожидалось, но я получаю эту ошибку TypeScript
Module '"/project/path/Database"' has no exported member '__getMockConnection'. [2305]
TypeScript не знает, что я импортирую Database
из макета. Также по этой причине я должен отключить диагностику ts-jest, которая жалуется на ту же проблему.
Как я могу решить это? Изменить путь импорта на '../__mocks__/Database'
не работает.
Вот репо: https://github.com/CodinCat/ts-jest-mock-issue
Откройте __tests__/index.spec.ts
с помощью редактора, который поддерживает TypeScript, такой как VS Code, и вы увидите ошибку.