测试驱动开发:如何使用scala在play框架中测试我的表单?

时间:2014-02-27 07:09:30

标签: scala frameworks tdd

我正在处理我的Web应用程序的表单,我想以我创建的表单测试输入字段,以确保它们将产生所需的结果。我对TDD完全不熟悉,所以我不确定如何制作假输入来测试我对输入字段的约束。

有人可以提供任何相关文档或发布一些示例代码吗?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

这是基本测试的样子:

import org.scalatest.FunSpec
import play.api.data.Form
import play.api.data.Forms._

class TddFormTest extends FunSpec {
  case class Data(name: String, age: Int)
  val form = Form(mapping("name" -> text(minLength = 1, maxLength = 25), "age" -> number)(Data.apply)(Data.unapply))
  describe("a basic form") {
    it("accepts name input") {
      form.bind(Map("name" -> "Exactly 25 characters...."))
    }

    it("requires name to be non-empty") {
      val boundForm = form.bind(Map("name" -> ""))
      assert(boundForm.hasErrors)
      assert(boundForm.errors("name").head.message == "error.minLength")
    }

    it("does not accept names over 25 characters") {
      val boundForm = form.bind(Map("name" -> "whoah this name is too long!!!!!!"))
      assert(boundForm.hasErrors)
      assert(boundForm.errors("name").head.message == "error.maxLength")
    }

    it("fills from Data") {
      val filledForm = form.fill(Data("Testerton Testertop", 42))
      assert(!filledForm.hasErrors)
    }

    it("binds to Data") {
      val name = "Testerton Testertop"
      val age = 42
      val boundForm = form.bind(Map("name" -> name, "age" -> age.toString))
      assert(Data(name, age) == boundForm.get)
    }
  }
}

它使用简单的Map直接测试表单,以提供来自表单的值。您可以绑定到Request对象,但这是一种直接测试驱动表单约束的简单方法。您可以通过集成到页面中的表单的快乐路径测试来补充这一点,以确保所有内容都正确地连接在一起。这种事情在这里有一些报道:https://www.playframework.com/documentation/2.3.x/ScalaFunctionalTestingWithScalaTest