$ apply vs $ digest en directivas de prueba

Si tengo una directiva que responde al estado de un atributo particular en el alcance, y quiero cambiar ese atributo en mi prueba y verificar que responda correctamente, ¿cuál es la mejor manera de hacer ese cambio?

He visto estos dos patrones:

scope.$apply(function() {
    scope.myAttribute = true;
});

y

scope.myAttribute = true;
scope.$digest();

¿Cuál es la diferencia entre ellos, cuál es mejor y por qué?

Respuestas a la pregunta(2)

Su respuesta a la pregunta