2017-07-07 40 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"))

并且您现在应该能够按预期运行测试。