在我們的遊戲應用中的每個控制器功能從數據庫(或其他方式)獲取數據參數測試,並將這些數值結果如何執行對控制器傳遞給在遊戲框架視圖
def index = Action { implicit request =>
val newsItems: List[String] = fetchNewsFromDB()
Ok(views.html.home.index(newsItems))
}
def fetchNewsFromDB() = List("Headline1", "Headline2")
我正在使用說明書編寫測試(基於文檔http://www.playframework.com/documentation/2.2.x/ScalaTest)
根據控制器的此文檔,如下所述。在接下來的測試中,我想確保索引頁面包含標題。我通過檢查,如果存在與類「標題」
"Example Page#index" should {
"should contain a headline" in {
val controller = new TestController()
val result: Future[SimpleResult] = controller.index().apply(FakeRequest())
val bodyText: String = contentAsString(result)
bodyText.toLowerCase must contain("<div class=\"headline\"")
}
}
但是我寧願檢查了控制器傳遞給視圖列表newsItems是否不爲空,一個div做到這一點。
這樣做的最好方法是什麼? 對於需要對控制器進行少量修改的通用方法,是否可以這樣做?
這種方法遠非理想,因爲每個控制器都需要修改,但我認爲這是一個很好的工作 – Wellingr
正如在我的例子中,'newsItems'的類型是'List [String]' 。是否也可以使用'val mockedNewsRenderer = mock [List [String] => Html]'並檢查作爲參數傳遞的'newsItems'是否非空? – Wellingr
@Fritsie絕對 - 對不起,我沒有注意到你正在使用'List [String]' - 查看我的更新答案,以瞭解如何使用Mockito的'ArgumentCaptor'來斷言模仿協作者的參數 – millhouse