2015-11-03 48 views
3

我已經寫了一個動作構建器,並將這個新動作應用到我的控制器上。Scala Play 2.4如何測試動作組合(使用動作構建器和動作過濾器)

下面是我的代碼:

class AuthAction @Inject()(authService: AuthService) { 
    def AuthAction(userId: Int) = new ActionBuilder[Request] with ActionFilter[Request] { 
     def filter[A](request: Request[A]): Future[Option[Result]] = { 
      request.headers.get("Authorization").map(header => { 
       authService.isAuth(header).flatMap { 
        case true => Future.successfuly(None) 
        case false => Future.successfuly(Some(Forbidden)) 
       } 
      }) 
     } 
    } 
} 

class UserController @Inject()(auth: AuthAction, xxxService: XxxService) extends Controller { 
    def xxx(userId: Int) = auth.AuthAction(userId).async { implicit request => 
     xxxService.xxx().map....... 
    } 
} 

不使用自定義的行動,我可以輕鬆地測試UserController中與ScalaTest和的Mockito(假請求和模擬xxxService)

我的問題是我怎麼能嘲笑AuthAction和使用ScalaTest和Mockito測試UserController?

感謝

+0

你問什麼樣的價值,在測試中注入'UserController'? –

+0

不,我在問我如何測試我的控制器,以及如何模擬注入的值? – ttt

回答

0
val authAction = mock[AuthAction] 

when(authAction.AuthAction(any[Int])).thenReturn { 
    new ActionBuilder[Request] with ActionFilter[Request] { 
    def filter[A](request: Request[A]): Future[Option[Result]] = 
     Future.successful(None) /* or Future.successful(Some(Forbidden)) */  
    } 
}