2012-06-22 18 views
6

Tengo problemas para ejecutar múltiples especificaciones funcionales (usando specs2), específicamente pruebas que inician un TestServer, abra un navegador HTMLUNIT, y navegue a una página para verificar un elemento. La página en cuestión carga los elementos que probamos en una solicitud ajax. La espera de que el elemento esté presente agota el tiempo con el siguiente mensaje de error.¿Cómo ejecuto varias especificaciones funcionales con TestServer en Play 2.0.1?

Fragmento de código:

trait CommonSteps extends BaseSpecfication { 
    val testServer: TestServer = TestServer(3333) 
    val testServerBaseURL: String = "http://localhost:3333/" 

    override def map(fs: => Fragments) = 
    Step(testServer.start())^super.map(fs)^Step(testServer.stop()) 

} 

class FunctionalTest1 extends Specification with CommonSteps { def is = 
    ... 

    ... extends When[...] { 
    val browser: TestBrowser = TestBrowser.of(HTMLUNIT) 
    browser.goTo(testServerBaseURL + "/some_path") 
    browser 
    } 

    ... extends Then[...] { 
    browser.await.until("element that is loaded on ajax request").isPresent() 
    ... 
    } 

} 

Nos sale el error:

Caused by: java.sql.SQLException: Attempting to obtain a connection from a pool that has already been shutdown. 
Stack trace of location where pool was shutdown follows: 
    java.lang.Thread.getStackTrace(Thread.java:1479) 
    com.jolbox.bonecp.BoneCP.captureStackTrace(BoneCP.java:543) 
    com.jolbox.bonecp.BoneCP.shutdown(BoneCP.java:159) 
    com.jolbox.bonecp.BoneCPDataSource.close(BoneCPDataSource.java:123) 
    play.api.db.BoneCPApi.shutdownPool(DB.scala:387) 
    play.api.db.BoneCPPlugin$$anonfun$onStop$1.apply(DB.scala:252) 
    play.api.db.BoneCPPlugin$$anonfun$onStop$1.apply(DB.scala:250) 
    scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) 
    scala.collection.immutable.List.foreach(List.scala:45) 
    play.api.db.BoneCPPlugin.onStop(DB.scala:250) 
    play.api.Play$$anonfun$stop$1$$anonfun$apply$1.apply(Play.scala:75) 
    play.api.Play$$anonfun$stop$1$$anonfun$apply$1.apply(Play.scala:74) 
    scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) 
    scala.collection.immutable.List.foreach(List.scala:45) 
    play.api.Play$$anonfun$stop$1.apply(Play.scala:74) 
    play.api.Play$$anonfun$stop$1.apply(Play.scala:74) 
    scala.Option.map(Option.scala:133) 
    play.api.Play$.stop(Play.scala:73) 
    play.core.server.NettyServer.stop(NettyServer.scala:73) 

Mientras que la prueba funciona cuando se ejecuta de manera aislada, obtenemos el error cuando se ejecutan dos o más de ellos juntos.

Parece estar relacionado con this issue, aunque mi ejemplo es una aplicación Scala Play. ¿Alguien puede confirmar que este problema se corrigió en una versión más nueva de Play? O bien, ¿hay alguna solución para evitar este error en Play 2.0.1?

Respuesta

3

Este problema se solucionará en Play 2.0.2, que actualmente se encuentra en estado RC. Es seguro actualizar de 2.0.1 a 2.0.2, ya que todo es compatible con versiones anteriores.

Gracias a @ guillaume-bort por proporcionar esta información.

+0

Más información está disponible aquí: https://groups.google.com/forum/?fromgroups=#!topic/play-framework/znFuqeRz84w – blackbox

Cuestiones relacionadas