Scala / Specs2:def is(implicit ee:ExecutionEnv)= {““服务”应{…}}

问题描述 投票:0回答:1

我尝试将Scala / Play项目升级到Play 2.7,Scala 2.12.11,Specs2 4.5.1。

在该项目中,从规范2的规范结构的意义上讲,我无法理解以下规范2的测试(可能是自编写测试以来,规范2 API发生了很大变化。]]

[当我查看当前API中的structure of specifications时,看不到is方法与should组合在一起的任何示例。

这应该是什么意思?

如何在当前的Specs2 API中重写这样的规范?

[我还注意到测试代码使用import org.specs2.mutable.Specification,而不是在使用import org.specs2.Specification方法时应该使用的is。并且它使用def is(implicit ee: ExecutionEnv),而不是def is

这是旧的测试:

package services

import org.specs2.concurrent.ExecutionEnv
import org.specs2.mutable.Specification
import org.specs2.specification.mutable.ExecutionEnvironment
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.test.WithApplication
import play.modules.reactivemongo._

import scala.concurrent.duration._

class StatisticsServiceSpec() extends Specification with ExecutionEnvironment {

  def is(implicit ee: ExecutionEnv) = {
    "The StatisticsService" should {

      "compute and publish statistics" in new WithApplication() {
        val repository = new MongoStatisticsRepository(configuredAppBuilder.injector.instanceOf[ReactiveMongoApi])
        val wsTwitterService = new WSTwitterService
        val service = new DefaultStatisticsService(repository, wsTwitterService)

        val f = service.createUserStatistics("elmanu")

        f must beEqualTo(()).await(retries = 0, timeout = 5.seconds)
      }

    }

    def configuredAppBuilder = {
      import scala.collection.JavaConversions.iterableAsScalaIterable

      val env = play.api.Environment.simple(mode = play.api.Mode.Test)
      val config = play.api.Configuration.load(env)
      val modules = config.getStringList("play.modules.enabled").fold(
        List.empty[String])(l => iterableAsScalaIterable(l).toList)

      new GuiceApplicationBuilder().
        configure("play.modules.enabled" -> (modules :+
          "play.modules.reactivemongo.ReactiveMongoModule")).build
    }
  }

}

为了简化代码以简化为实际的Specs2 API,我认为可以将其简化为以下形式:

package services

import org.specs2.concurrent.ExecutionEnv
import org.specs2.mutable.Specification

import scala.concurrent.Future
import play.api.test.WithApplication

import scala.concurrent.duration._

class StatisticsServiceSpec(implicit ee: ExecutionEnv) extends Specification /* with ExecutionEnvironment */ {

  def is(implicit ee: ExecutionEnv) = {

    "The StatisticsService" should {

      "compute and publish statistics" in new WithApplication() {

        val f = Future(1)

        f must beEqualTo(1).await(retries = 0, timeout = 5.seconds)
      }
    }
  }
}

请注意,我删除了ExecutionEnvironment特性,因为它似乎已从库中删除。

现在,代码终于可以编译了,但是当我尝试运行测试时,没有错误,但是实际上没有测试在运行:输出为Empty test suite.

我尝试将Scala / Play项目升级到Play 2.7,Scala 2.12.11,Specs2 4.5.1。在该项目中,有以下Specs2测试,就其Specs2规范而言,我无法理解...

scala playframework specs2
1个回答
2
投票

新规范应该是

© www.soinside.com 2019 - 2024. All rights reserved.