Scala Noob здесь.
В настоящее время я пытаюсь создать функциональные тесты для веб-приложения на основе Play (Scala), используя specs2. Сами примеры просты, т.е.
class SignInSpec extends PlaySpecification {
// bring the workflow steps in scope and instrument browser with them
import utils.WorkflowSteps.AuthSteps
"An activated user".should {
"be able to sign in to the admin console" in new WithDbData(webDriver = WebDriverFactory(FIREFOX)) {
// this should be: browser.signIn(testData.manager)
// with the manager already persisted in the database
browser.signIn(Manager(None, "me@home.com", "12341234", "John", "Doe", List("admin")))
}
}
}
Чего я хотел бы добиться, так это снабдить каждый пример определенным набором тестовых данных, некоторые из которых уже будут сохранены в базе данных. Поэтому мне нужен метод настройки и метод разбора каждого примера, который подготавливает класс TestData
, заполняет его соответствующими данными и сохраняет некоторые из них, чтобы пример мог начинаться с определенного состояния базы данных.
В конечном итоге мне нужен механизм плагинов, в котором плагины определяли тестовые данные для набора примеров (воспринимайте это как применение схемы кредитования).
Что я сделал до сих пор:
- Я пытался использовать некоторую разновидность
Around
, но я не знаю, как передать данные в пример, так как мне пришлось бы добавить дополнительное возвращаемое значение.
- Я пробовал контекст ForEach в specs2, но это конфликтует с WithBrowser Play
- Я играл с неявными значениями vals, но опять же я не знаю, как добавить неявный параметр в блок, который преобразуется из конструктора в параметр вызова функции, используя
DelayedInit
Есть идеи, как поступить, чтобы достичь следующего?
- Расширение спецификации или примера из дополнительной характеристики или класса, который вызывает пример с одним параметром
TestData
- Эта дополнительная черта или класс должны быть в состоянии подготовить тестовые данные и сохранить их части
- Эта дополнительная черта или класс должны быть совместимы с
WithBrowser