¿Cuál es la diferencia entre fakeAsync y async en pruebas angular2?

Sé que la función tick () utiliza fakeAsync. Y también puedo usar fixture.whenStable (). Then () con async y fakeAsync también. Quiero saber el caso de uso exacto para ambos. ¿Alguien puede explicar esto con ejemplos?

Nota: Quiero usar Fake Service o Stub en ambos escenarios.