2012-09-25 26 views
5

Tengo un problema con la burla en una aplicación Play. Tengo una aplicación de la siguiente manera:¡Burlarse del juego! y Scala

object Application extends Controller { 
    def login = Action {implicit request => 
     val email = ... //Some email from the request 
     if(EmailChecker.checkEmail(email)) { 
      Ok("Email is checked and is fine") 
     } else { 
      Ok("Email is wrong") 
     } 
    } 
} 

Lo que quiero hacer es poner a prueba una solicitud, pero burlarse de distancia del EmailChecker robaba lo hace un poco de búsqueda en alguna base de datos y que no es algo que quiero hacer en mi prueba.

He visto algunos tutoriales sobre cómo burlarse en Scala pero no encuentro nada que cubra el caso que tengo.

Cualquier ayuda/indicaciones/tutoriales que muestren cómo hacer lo que quiero hacer sería genial.

Soy bastante nuevo en ambos Play! y Scala ...

Respuesta

5

Una posible solución:

class Application(emailChecker: EmailChecker) extends Controller { 
    def login = Action {implicit request => 
     val email = ... //Some email from the request 
     if(emailChecker.checkEmail(email)) { 
      Ok("Email is checked and is fine") 
     } else { 
      Ok("Email is wrong") 
     } 
    } 
} 

object Application extends Application(EmailChecker) 

Y la prueba sería:

import org.specs2.Specification 
import org.specs2.mock.Mockito 

class ApplicationUnitSpec extends Specification with Mockito { def is = 
    "Test Application" ! { 
     val emailChecker = mock[EmailChecker] 
     val response = new Application(emailChecker).login(FakeRequest) 
     there was one(emailChecker).checkEmail("[email protected]") 
    } 
} 

También me gusta definir un objeto que contiene los implícitos reales y de prueba que proporcionan la verdadera y las versiones completas de servicios como EmailChecker e importarlas dependiendo de si se trata de un código de prueba o prod. En este caso, debe hacer que el parámetro emailChecker esté implícito. Un tipo crudo de inyección de dependencia.

+0

Esto funcionó. Gracias. – Jakob

+0

Me alegra oírlo. ¿Podría aceptar la respuesta, por favor? (Perseguir desvergonzado :)) – rjsvaljean

+0

¿Existe alguna posibilidad de que pueda agregar la afirmación en la respuesta a su ejemplo de prueba? –

Cuestiones relacionadas