У меня возникли некоторые проблемы с mocking, я смоделировал модуль узла, добавив mocks / ssh2-sftp-client.ts:
const mockSsh2SftpClient = jest.fn().mockImplementation(() => {
return {
connect: async () => {},
end: async () => {},
on: () => {}
}
})
export default mockSsh2SftpClient
Это работает, вроде. Мои тесты выполняются корректно с использованием этого макета, но в тестах SftpClient.mock.instances [0] представляет собой пустой объект mockConstructor {} вместо этого макета (т. Е. SftpClient.mock.instances [0] .end не определен). Что я делаю неправильно?
для справки мой код тестирования выглядит так:
import { ConnectConfig } from 'ssh2'
import SftpClient from 'ssh2-sftp-client'
import { withSftp } from '../sftp'
// Type assertion to make TypeScript happy.
const MockSftpClient = SftpClient as jest.Mock<SftpClient>
describe(withSftp, () => {
const mockConnectionConfig: ConnectConfig = {}
beforeEach(() => {
// Clear all instances and calls to constructor and all methods:
MockSftpClient.mockClear()
})
it('should call the callback after successfully connecting', async () => {
const mockCallback = jest.fn()
// Instantiates SftpClient and calls connect, then the callback, then end.
await withSftp(mockConnectionConfig, mockCallback)
const mockInstance = MockSftpClient.mock.instances
expect(mockCallback).toHaveBeenCalledTimes(1)
expect(MockSftpClient.mock.instances[0].end).toHaveBeenCalledTimes(1)
})
})
Последний сбой, потому что MockSftpClient.mock.instances [0] .end не определен, где он должен быть функцией.