Когда Promise
разрешает, обратный вызов ставится в очередь в очереди PromiseJobs , которая обрабатывается после завершения текущего запущенного сообщения .
В этом случае ваши функции ставят обратные вызовы в очереди в PromiseJobs, и текущее текущее сообщение - сам тест , поэтому тест выполняется до завершения до того, как задания, поставленные в очередь в PromiseJobs, могут запустить .
Поскольку задания в PromiseJobs еще не выполнялись, тест завершается неудачно, когда он попадает в тест для channelSpy
, поскольку он еще не был вызван.
Promise
, возвращаемый init
, уже прикован к Promises
, возвращаемому connect
и createChannel
, поэтому все, что вам нужно сделать, это сделать вашу тестовую функцию async
и затем вызвать await
на Promise
возвращается init
:
it('Should check if SomeClass has created Channel', async () => { // async test function
const someclass = SomeClass.getInstance();
await someclass.init(); // await the Promise returned by init
// @ts-ignore
expect(amqplib.connect.callCount).to.be.eq(1); // True
// @ts-ignore
expect(this.channelSpy.callCount).to.be.eq(1); // True
});