elastic4s - 在 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
}
解决方案
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")))
推荐阅读
- android - 错误:包 android.arch.lifecycle 不存在
- kubernetes - 将环境变量从现成的 kubernetes secret 加载到 helm chart
- python - Wagtail:创建新页面时可以将父页面传递给structblock吗?
- swift - 如何杀死系统扩展或网络扩展?
- docker - 为什么我不能运行 docker 和 virtualbox
- jquery - 带有按钮的夜间模式和白天模式的 jquery
- amazon-athena - 如何获取输入文件大小作为 AWS Athena 外部表中的列
- html - Boostrap4:具有固定顶部导航和固定页脚的仪表板
- python - 如何在 C 中做 random.choice
- java - 为什么可以使用类名作为向量类型?