首页 > 解决方案 > 在 Elastic4S 7.x 中使用本地节点运行单元测试

问题描述

我正在将我的系统升级到 Elasticsearch / Elastic4S 7.3,但我的单元测试遇到了问题。希望我遗漏了一些明显的东西。

目前(使用 E4S 6.1.4)我使用 ClassLocalNodeProvider 为我提供一个本地 http 客户端进行测试(在 Travis 中针对每个 GitHib 拉取请求远程运行)

在 E4S 7.x 中似乎没有直接替代 LocalNode (?)

我确实尝试在下面的代码中用 ClientProvider 替换 ClassLocalNodeProvider,但看起来我需要为客户端提供一个具体的定义:ElasticClient(我的 ElasticClientProvider 类的 ES7 版本确实需要 ElasticClient 而不是 HttpClient)。

class ElasticsearchRepositorySpec extends WordSpec with SearchMatchers with ClassLocalNodeProvider with HttpElasticSugar {

  val testClient: HttpClient = http

  val elasticClientProvider: ElasticClientProvider = new ElasticClientProvider {
    override def client: HttpClient = testClient
  }

标签: elastic4s

解决方案


E4S 不再支持 LocalNode,我现在使用 Docker 插件来创建一个普通的 ES 节点来运行测试。在本地工作,尚未使用 Travis 或 Concourse 进行测试。容器确实需要一些时间才能启动,然后它在 localhost 上运行,并具有动态分配的端口号。

import org.testcontainers.elasticsearch.ElasticsearchContainer  

val container = new ElasticsearchContainer()
container.setDockerImageName("docker.elastic.co/elasticsearch/elasticsearch-oss:7.3.0")
container.start()

val host = container.getHttpHostAddress()
val client: ElasticClient = new ElasticClient(JavaClient(ElasticsearchClientUri(s"http://${host}?ssl=false")))

推荐阅读