CodeSOD: 더 오래 기다리세요
카렌은 사양 테스트에서 플래키니스(flakiness)를 경험했는데, 이는 수천 번의 실행마다 몇 번씩 발생했습니다. 이러한 복잡하고 타이밍에 민감한 테스트는 관대한 타이밍 창과 통과한 단위 테스트에도 불구하고 가끔 실패했습니다. 이 문제는 JavaScript의 setTimeout에서 비롯되었는데, 이는 문서에서 더 오래 기다릴 수 있다고 제안하는 것과 달리 Node.js에서는 지정된 시간이 경과하기 전에 콜백을 실제로 호출할 수 있습니다. 카렌의 간단한 대기 함수는 처음에 지연을 도입하기 위해 setTimeout을 사용했습니다. 광범위한 디버깅 후, 그녀는 이 타이밍 불일치가 플래키 테스트의 근본 원인임을 발견했습니다. 이를 해결하기 위해 그녀는 경과 시간을 1밀리초마다 계속 확인하도록 대기 함수를 다시 작성했습니다. 이 새로운 함수는 목표 기간이 충족된 후에만 작업이 완료되도록 보장하여 조기 타임아웃을 방지합니다. 효과적이기는 하지만, 이 해결책은 비효율적인 것으로 간주되며 기능 테스트의 문제가 되는 시간 민감성을 강조합니다. 또한 Node.js 런타임의 스케줄링 보장의 결함을 지적합니다. 저자는 이러한 해결책이 필요하다는 사실에 대해 실망감을 표현합니다.