문제는 시간의 경과를 표시하는 Date.now()
호출 노드 런타임 (timers.js
) 코드가 있다는 것이다. 타이머 (setTimeout
)를 설정하고 그 코드가 jasmine.Clock
을 사용하지 않는 동안 실행되는 코드를 가지고 있다면 node.js가 다음 번에 timeout을 실행하기 전에 어느 정도 시간이 경과 할 때까지 기다릴 수 있습니다. 이 코드는 외부 자바 스크립트 토지에서 호출 된 것으로 보이므로 자바 스크립트의 단일 스레드 속성에 을 의존 할 수 없습니다. Date.now
스파이의 .andCallFake
에 중단 점을 넣음으로써 스펙의 실행이 밀리 초를 기다리는 동안 무기한 중단되는 것을 알 수있었습니다.
우리가 매우 큰 단위 테스트 스위트를 가지고 있으며 setTimeout
이 다른 호출의 부작용으로 호출되고 jasmine.Clock
이 모든 사양에서 보편적으로 사용되지 않을 가능성이 있기 때문에 이는 나에게 문제가됩니다. 이것은 최적화의 부작용이므로 (주석에 '너무 많은 오버 헤드'가 있음), node.js의 버그라고 생각합니다.
당신은 당신의 테스트 시간을 중지하려면 : Date.now에
- 스파이 귀하의 사양 함수 내에서 (
it
기능 -하지 beforeEach
을). 그렇게하면 스펙이 지연되지 않습니다 (왜 @ marco.jantke가이 문제를 보지 못했는지 설명합니다).
- 테스트중인 코드에서 타이머를 사용하는 경우
jasmine.Clock
을 사용하십시오.
내 코드는 내 코드와 정확히 같습니다. 내 재스민 노드 버전은 1.12.0 – Shuping
나는 또한 재스민 노드 1.11.0 같은 문제를 시도했다. OS는 Ubuntu 12입니다. 왜 Date.now에서 스파이를하면 jasmine-node가 작동하지 않는지 알 수 없습니다. – Shuping