helper function들은 schedule assertion: virtual time을 실행한다. → testScheduler.run() 의 콜백이 끝날때 or flush() 호출될때 실행
expect: synchronous assertion
콜백 안에서 timer/AsyncScheduler 를 쓰는 Operator 들은 자동으로 TestScheduler를 쓴다. TestScheduler는 virtual time 에서 실행되며, synchronous 하지만 testScheduler 콜백이 끝나야지만 실행된다. flush() 를 해주면 virtual time 을 수동으로 트리거하기 때문에 synchronous assertion 으로 테스트가 가능하다.
virtual time 속에서 schedule assertions 가 시작되면 observable 들이 subscribe 된다