【问题标题】:Test Driven Development: How do I test my forms in the play framework using scala?测试驱动开发:如何使用 scala 在 play 框架中测试我的表单?
【发布时间】:2014-02-27 07:09:29
【问题描述】:

我正在为我的 Web 应用程序制作一个表单,我想测试我创建的表单中的输入字段,以确保它们会产生所需的结果。我对 TDD 完全陌生,所以我不确定如何制作虚假输入来测试我对输入字段的约束。

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

非常感谢。

【问题讨论】:

    标签: scala frameworks tdd


    【解决方案1】:

    这是一个基本测试的样子:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      相关资源
      最近更新 更多