Hi,
I am trying since 2 days ago create an integration test for my routes using Play framework. I could create on for the HomeController that doesn't have any parameter on the constructor. Now I have my second Controller: RackController
import javax.inject._
class RackController @Inject()(cc: ControllerComponents, rackRepository: RackRepository, gpuRepository: GpuRepository) extends AbstractController(cc) with I18nSupport {
and I created this integration test:
import models.{GpuRepository, RackRepository}
import org.scalatestplus.play._
import org.scalatestplus.play.guice._
import play.api.db.evolutions.Evolutions
import play.api.db.{Database, Databases}
import play.api.inject.bind
import play.api.inject.guice.GuiceInjectorBuilder
import play.api.test.Helpers._
import play.api.test._
class RackControllerSpec extends PlaySpec with GuiceOneAppPerTest with Injecting {
val database = Databases(
driver = "org.sqlite.JDBC",
url = "jdbc:sqlite:development.db",
name = "default",
config = Map(
"username" -> "",
"password" -> ""
)
)
val guice = new GuiceInjectorBuilder()
.overrides(bind[Database].toInstance(database))
.injector()
val rack = guice.instanceOf[RackRepository]
val gpu = guice.instanceOf[GpuRepository]
def beforeAll() = Evolutions.applyEvolutions(database)
def afterAll() = {
// Evolutions.cleanupEvolutions(database)
database.shutdown()
}
"RackController GET" should {
"render the rack page from a new instance of controller" in {
val controller = new RackController(stubControllerComponents(), rack, gpu)
val result = controller.all().apply(FakeRequest(GET, "/api/all"))
status(result) mustBe OK
contentType(result) mustBe Some("application/json")
contentAsString(result) must include("{ \"profitPerGpu\" }")
}
}
}
I have this error saying the no implementations of play.api.db.slick.DatabaseConfigProvider was found. I already tried to remove jdbc from my build.sbt but it didnt work.
Does anyone have an idea?
Thanks, Felipe
[info] RackControllerSpec:
[info] controllers.RackControllerSpec *** ABORTED ***
[info] com.google.inject.ConfigurationException: Guice configuration errors:
[info]
[info] 1) No implementation for play.api.db.slick.DatabaseConfigProvider was bound.
[info] while locating play.api.db.slick.DatabaseConfigProvider
[info] for the 1st parameter of models.RackRepository.<init>(RackRepository.scala:13)
[info] while locating models.RackRepository
[info]
[info] 2) No implementation for scala.concurrent.ExecutionContext was bound.
[info] while locating scala.concurrent.ExecutionContext
[info] for the 2nd parameter of models.RackRepository.<init>(RackRepository.scala:13)
[info] while locating models.RackRepository
[info]
[info] 2 errors
[info] at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1045)
[info] at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
[info] at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1054)
[info] at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:409)
[info] at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:404)
[info] at play.api.inject.ContextClassLoaderInjector.$anonfun$instanceOf$2(Injector.scala:117)
[info] at play.api.inject.ContextClassLoaderInjector.withContext(Injector.scala:126)
[info] at play.api.inject.ContextClassLoaderInjector.instanceOf(Injector.scala:117)
[info] at controllers.RackControllerSpec.<init>(RackControllerSpec.scala:28)
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)