在我们的游戏应用中的每个控制器功能从数据库(或其他方式)获取数据参数测试,并将这些数值结果如何执行对控制器传递给在游戏框架视图
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