Platinum Partner
java,frameworks,testing,tips and tricks

Testing Frontend integration with Play 2.x (Scala)

For people in hurry here is the code and the steps.

In continuation of Play 2.x (Scala) is it a Spring MVC contender? – Introduction, in this blog, I will demonstrate how we implement a simple test to test the Web layer using TestServer. I will continue from my earlier example of Implementing Controller using Play 2.x (Scala), ScalaMock where I did the mock testing.

Refer Build.scala for build configuration.

In this blog, I will be testing the routes refer CoffeesControllerTest.scala for more details, the snippet is as below,

it("POST /coffees/Colombian/delete should return SEE_OTHER") {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
 
    val Some(result) = route(FakeRequest(POST, "/coffees/Colombian/delete"))
    status(result) should equal(SEE_OTHER)
  }
}
 
it("POST wrong url /coffees/Colombian/delete1 should return None") {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
 
    val result = route(FakeRequest(POST, "/coffees/Colombian/delete1"))
    result should equal(None)
  }
}

In the next block I will show how to do end to end testing from web layer using TestServer refer IntegrationTest.scala,

class IntegrationSpec extends Specification {
 
  "Application" should {
 
    "work from within a browser" in {
      running(TestServer(3333), HTMLUNIT) { browser =>
 
        browser.goTo("http://localhost:3333/coffees")
        browser.pageSource must contain("Colombian")
      }
    }
 
    "work from within a browser" in {
      running(TestServer(3333), HTMLUNIT) { browser =>
 
        browser.goTo("http://localhost:3333/coffees")
 
        browser.pageSource must contain("Colombian")
      }
    }
 
    "work from within a browser" in {
      running(TestServer(3333), HTMLUNIT) { browser =>
 
        browser.goTo("http://localhost:3333/coffees")
        browser.pageSource must not contain("Colombian1")
      }
    }
 
  }
}

Also while testing the application from web layer, we need to populate the data in the Global.scala as below,

object Global extends GlobalSettings {
 
  override def onStart(app: Application) {
 
    lazy val database = Database.forDataSource(DB.getDataSource())
 
    database withSession {
      // Create the tables, including primary and foreign keys
      val ddl = (Suppliers.ddl ++ Coffees.ddl)
 
      ddl.create
 
      // Insert some suppliers
      Suppliers.insertAll(
        Supplier(Some(101), "Acme, Inc.", "99 Market Street", "Groundsville", "CA", "95199"),
//...
      // Insert some coffees (using JDBC's batch insert feature, if supported by the DB)
      Coffees.insertAll(
        Coffee(Some("Colombian"), 101, 799, 0, 0),
    }
  }
}

I hope this blog helped you. In the next blog I will implement simple authentication.


 

Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}