Библиотека Android для визуализации ваших экранов приложения без физического устройства или эмулятора.
class LaunchViewTest {
@get:Rule
val paparazzi = Paparazzi (
deviceConfig = PIXEL_5 ,
theme = " android:Theme.Material.Light.NoActionBar "
// ...see docs for more options
)
@Test
fun launchView () {
val view = paparazzi.inflate< LaunchView >( R .layout.launch)
// or...
// val view = LaunchView(paparazzi.context)
view.setModel( LaunchModel (title = " paparazzi " ))
paparazzi.snapshot(view)
}
@Test
fun launchComposable () {
paparazzi.snapshot {
MyComposable ()
}
}
}Смотрите веб -сайт проекта для документации и API.
./gradlew sample:testDebug Запускает тесты и генерирует отчет HTML в sample/build/reports/paparazzi/ показывает все тестовые прогоны и снимки.
./gradlew sample:recordPaparazziDebug Сохраняет снимки в виде золотых значений в предопределенное местоположение, контролируемое источником (по умолчанию в src/test/snapshots ).
./gradlew sample:verifyPaparazziDebug Занимает тесты и проверяет на ранее записанные золотые значения. Сбои генерируют различия в sample/build/paparazzi/failures .
Для получения дополнительных примеров, ознакомьтесь с образцом проекта.
Рекомендуется использовать GIT LFS для хранения ваших снимков. Вот быстрая настройка:
brew install git-lfs
git config core.hooksPath # optional, confirm where your git hooks will be installed
git lfs install --local
git lfs track " **/snapshots/**/*.png "
git add .gitattributesНа CI вы можете настроить что -то вроде:
$HOOKS_DIR/pre-receive
# compares files that match .gitattributes filter to those actually tracked by git-lfs
diff <( git ls-files ' :(attr:filter=lfs) ' | sort ) <( git lfs ls-files -n | sort ) > /dev/null
ret= $?
if [[ $ret -ne 0 ]] ; then
echo >&2 " This remote has detected files committed without using Git LFS. Run 'brew install git-lfs && git lfs install' to install it and re-commit your files. " ;
exit 1 ;
fi your_build_script.sh
if [[ is running snapshot tests ]] ; then
# fail fast if files not checked in using git lfs
" $HOOKS_DIR " /pre-receive
git lfs install --local
git lfs pull
fi При использовании Jetifier для переворачивания библиотек поддержки добавьте следующее в свой gradle.properties чтобы исключить комплекты Android -зависимости.
android.jetifier.ignorelist =android-base-common,commonПринимая скриншоты Lottie Animation, вам нужно заставить Лотти не бежать в фоновой теме, в противном случае папарацци могут бросить исключения № 494, #630.
@Before
fun setup () {
LottieTask . EXECUTOR = Executor ( Runnable ::run)
} Некоторые композиции -такие как GoogleMap() -проверьте на LocalInspectionMode , чтобы короткоцировать в композицию @Preview -safe.
Тем не менее, Paparazzi не устанавливает LocalInspectionMode во всем мире, чтобы гарантировать, что снимок представляет собой истинный вывод производства, аналогичный тому, как он переопределяет View.isInEditMode для устаревших представлений.
В качестве обходного пути мы рекомендуем обернуть такую композицию в пользовательскую композицию с помощью CompositionLocalProvider и установить там LocalInspectionMode .
@Test
fun inspectionModeView () {
paparazzi.snapshot(
CompositionLocalProvider ( LocalInspectionMode provides true ) {
YourComposable ()
}
)
}Наш журнал изменений имеет историю выпуска.
Использование приложения плагина:
buildscript {
repositories {
mavenCentral()
google()
}
dependencies {
classpath ' app.cash.paparazzi:paparazzi-gradle-plugin:1.3.5 '
}
}
apply plugin : ' app.cash.paparazzi 'Используя плагины DSL:
plugins {
id ' app.cash.paparazzi ' version ' 1.3.5 '
} Снимки версии разработки доступны в snapshots Sonatype.
repositories {
// ...
maven {
url ' https://oss.sonatype.org/content/repositories/snapshots/ '
}
} Copyright 2019 Square, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.