Я пытаюсь настроить тесты для моей программы сканирования баз данных, и мне не удается заменить метод класса, который я тестирую, импортирует.
Чтобы не записывать слишком много кода, я просто изложу общую форму проблемы. В моей тестовой функции у меня есть:
describe("test",()=>{
let result1;
beforeAll(async ()=>{
await createConnection();
})
afterAll(async ()=>{
getConnection().close();
})
test("setup test",async () => {
result1 = await WeatherController.startForecastAPI();
expect(result1.status).toBe(Status.SUCCESS);
})
})
Файл WeatherController.ts (... где был взят код):
...
import AccessTokenService from '../services/AccessTokenService';
export default class WeatherController{
...
static async startForecastAPI(){
...
const accessToken = AccessTokenService.getAccessToken();//get and validate token
...
}
}
Внутри класса WeatherController startForecastAPI определяется как статический асинхронный метод. Класс импортирует несколько других классов, в том числе класс AccessTokenService, который используется для получения действительных токенов доступа. AccessTokenService.getAccessToken () должен возвращать объект с несколькими свойствами, которые он получает через запрос http.
Я хочу смоделировать результаты вызова AccessTokenService, но я не вызываю его напрямую в своей тестовой функции, я вызываю WeatherController, а WeatherController вызывает AccessTokenService. Как я могу заменить то, что вызывает WeatherController, когда я тестирую его, но не касаясь кода WeatherController? Я пытался просмотреть шутливые документы, но я довольно новичок во всем этом, и они сбивают с толку. Мне не совсем понятно, как работает область видимости здесь (я пытался определить функцию в тестовом коде и вызвать ее в тестируемой функции, но это выходит за рамки).
Вызов await WeatherController.startForecastAPI () в тестовой функции возвращает неопределенное значение, но код работает нормально, когда я жестко кодирую accessToken как действительный объект, я просто не могу найти способ вставить этот объект в код через функция проверки.