Обычный шаблон, который я применяю при написании модульных тестов, - это создание обещания, которое никогда не устанавливается.
Это позволяет мне настроить систему в состоянии загрузки, и я могу проверить правильность поведения при загрузке.
it("Return state 'LOADING'", () => {
sinon.stub(api, 'findMySessions').returns(new Promise(r => {}));
// loadMySessions is an async function, but I don't await it.
loadMySessions();
// Now the state of my system reflects the state it's in while waiting for a response
expect(getState()).to.equal("LOADING");
});
afterEach(() => { sinon.reset() });
Если обещание ведет себя так же, как и любой другой нормальный объект, в конечном итоге его следует собирать. Я создаю экземпляр и перехожу к sinon, который просят сбрасывать после каждого теста. Ничто не должно содержать ссылку на этот объект обещания.
Однако node.js (или какой-либо из запущенных javascript двигателей) может дать обещаниям специальную обработку, например, для обработки необработанных отклонений или другого запуска проблемы времени.
Так может ли этот фрагмент кода вызвать утечку или это безопасно?