2017-07-07 16 views
0

當我試圖在Scala中的Play 2.6中測試控制器時,我得到一個空指針異常。 這是一個OK響應測試:單元測試Play中的控制器2.6

class ApplicationControllerSpec extends PlaySpec 
with MockitoSugar with ScalaFutures { 

    val mockOrchestrator = mock[ApplicationOrchestrator] 
    val mockCC = mock[ControllerComponents] 
    val controller = new ApplicationController(mockOrchestrator, mockCC) 
    val method = controller.home()(FakeRequest()) 

    assert(status(method) == 200) 
} 

這是控制器我測試:

class ApplicationController @Inject() 
(orchestrator: ApplicationOrchestrator, cc: ControllerComponents) 
extends AbstractController(cc) with I18nSupport { 

    def home(): Action[AnyContent] = Action { 
     implicit request: RequestHeader => //line 29 
     Ok(views.html.home()) 
    } 
} 

錯誤看起來與隱含請求相關聯,但我無法找到一個解決方案。

日誌輸出是:

java.lang.NullPointerException was thrown. java.lang.NullPointerException at controllers.ApplicationController.home(ApplicationController.scala:29)

回答

0

該方法需要一個請求要被送入,並且尚未供給它一個有效的請求。看起來您需要將一些參數提供給FakeRequest。

如果您的routes.conf文件,你有一個控制器的方法連接爲:

GET /home controllers.ApplicationController.home

然後在你的單元測試這一行:

val method = controller.home()(FakeRequest())

真的應該是:

val method = controller.home().apply(FakeRequest(GET, "/home"))

並且您現在應該能夠按預期運行測試。