Как удалить каталог перед запуском в ScalaTest/sbt/Intellij?

В настоящее время я использую ScalaTest 3.0.1 для своего проекта Scala 2.11.8 с sbt 0.13.18 в качестве инструмента сборки. IDE — это Intellij.

Это проект Spark, и я использую временный каталог в root/temp/ для контрольных точек и складирования. Когда я запускаю тесты несколько раз, контрольные точки продолжают добавляться, в конечном итоге достигая очень большого размера. Я хочу сохранить контрольные точки после запуска теста, чтобы их можно было использовать для проверки, но я хотел бы удалить их перед следующим запуском.

Как вы можете сделать это, используя sbt и ScalaTest в Intellij?

Я пытался настроить sbt clean с моим временным каталогом в build.sbt, но я не могу заставить его удалить каталог, и, читая документальные подсказки, он удалит только файлы, созданные sbt, поэтому я отказался от этой идеи .

В настоящее время я изучаю настройку моего ScalaTest, чтобы иметь событие BeforeAll, которое удалит каталог, но я не уверен, что это правильный подход, и у меня возникли проблемы с его работой.


person WarSame    schedule 09.07.2020    source источник
comment
IDE — это Intellij. Что насчет этого?   -  person pedrofurla    schedule 09.07.2020
comment
Включая это, если это актуально, потому что я заметил, что Intellij иногда странно относится к sbt. Я также только что понял, что оставил версии выключенными, поэтому я добавлю их.   -  person WarSame    schedule 09.07.2020


Ответы (1)


На основе https://stackoverflow.com/a/48659771/5205022 clean может включать temp каталог

cleanFiles += baseDirectory.value / "temp"

Другой вариант — создать пользовательскую задачу, которая очищает temp, например, используя better-files.

lazy val deleteTestTemp = taskKey[Unit]("Delete test temp directory")
deleteTestTemp := {
  import better.files._
  val temp = (baseDirectory.value / "temp").toScala
  if (temp.exists) temp.delete()
}

где project/plugins.sbt содержит

libraryDependencies += "com.github.pathikrit" %% "better-files" % "3.9.1"

мы могли бы очистить, а затем протестировать так

deleteTestTemp;test
person Mario Galic    schedule 09.07.2020
comment
Первый подход — это тот же код, что и раньше, но он не работает. Когда я inspect clean-files, я вижу каталог в списке, но я не вижу никаких подробностей, когда я использую команду last. Он просто работает быстро и не удаляет файлы. Я пытаюсь заставить работать второй подход, но не могу импортировать файл better.files._, хотя у меня есть модуль. - person WarSame; 09.07.2020
comment
@WarSame Что касается первого подхода, если вы выполняете show cleanFiles, отображается ли каталог temp? Что касается второго подхода, обязательно добавьте зависимость под project/plugins.sbt или project/build.sbt, а не под builld.sbt корневого проекта, поскольку она должна быть зависимостью метапроекта, а не собственно проекта, согласно scala-sbt.org/1.x/docs/Organizing-Build .html#sbt+является+рекурсивным - person Mario Galic; 09.07.2020
comment
Если я выполняю show clean-files или show cleanFiles, я вижу каталог temp, указанный в обоих, хотя он все еще не удаляется. Если я поставлю libraryDependency, о котором вы упомянули, в моем project/plugins.sbt, Intellij даст подсказку, что Expression type Def.Setting[Seq[ModuleID]] must conform to DslEntry in sbt file и не может разрешить зависимость. Я попробовал addSbtPlugin, у которого была такая же проблема. Кажется, я не могу заставить его найти эту зависимость. - person WarSame; 09.07.2020