У меня есть следующий класс:
import * as request from "request-promise-native";
export class publisher {
publish(file : string) : PublisherResponse{
let response = PublisherResponse.EmptyResponse;
let options = {};
let promise = this.executeRequest(file , options);
promise.then( value => response = value );
return response;
}
async executeRequest(file : string, options : any ) : Promise<PublisherResponse>{
let promise = await request.get("http://someAPI", options);
console.debug("we need to wait for this thing to finish ...")
let response = await promise;
let data = response.data;
return new new PublisherResponse(file, data);
}
}
Тест Jest выглядит следующим образом:
test('Should publish a valid single document', async () => {
// Arrange
var documentToPublish = "file1.oas3";
let sut = new publisher();
let expectedResponse = new PublisherResponse(documentToPublish, "some-data");
// Act
let actualResponse = sut.publish(documentToPublish);
// Assert
expect(actualResponse).toEqual(expectedResponse);
});
Тест не пройден, потому что выполнение не останавливается в асинхронном режиме c Метод executeRequest, пока ожидаемые строки не будут завершены.
В результате я получаю сообщение об ошибке, указывающее, что
Невозможно войти в систему после завершения испытаний. Вы забыли подождать что-то асин c в своем тесте? Попытка занести в журнал «нам нужно дождаться, пока эта вещь закончится sh ...».
Я предпочитаю не заставлять API publi sh сейчас возвращать обещание, если я может сойти с рук. Есть идеи о том, чего мне здесь не хватает?