Une bibliothèque Android pour rendre vos écrans d'application sans appareil physique ni émulateur.
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 ()
}
}
}Voir le site Web du projet pour la documentation et les API.
./gradlew sample:testDebug Exécute des tests et génère un rapport HTML chez sample/build/reports/paparazzi/ Affichage de tous les essais et instantanés.
./gradlew sample:recordPaparazziDebug Enregistre des instantanés sous forme de valeurs d'or à un emplacement prédéfini à la source (par défaut, src/test/snapshots ).
./gradlew sample:verifyPaparazziDebug Effectue des tests et vérifie les valeurs dorées précédemment enregistrées. Les échecs génèrent des différences à sample/build/paparazzi/failures .
Pour plus d'exemples, consultez l'exemple de projet.
Il est recommandé d'utiliser Git LFS pour stocker vos instantanés. Voici une configuration rapide:
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 .gitattributesSur CI, vous pourriez configurer quelque chose comme:
$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 Si vous utilisez Jettifier pour migrer hors des bibliothèques de support, ajoutez ce qui suit à votre gradle.properties pour exclure les dépendances Android groupées.
android.jetifier.ignorelist =android-base-common,commonLorsque vous prenez des captures d'écran d'animations Lottie, vous devez forcer Lottie à ne pas fonctionner sur un fil d'arrière-plan, sinon les paparazzi peuvent lancer des exceptions # 494, # 630.
@Before
fun setup () {
LottieTask . EXECUTOR = Executor ( Runnable ::run)
} Certains composiables - tels que GoogleMap() - vérifiez le LocalInspectionMode à court-circuit vers un composable @Preview -Safe.
Cependant, Paparazzi ne définit pas LocalInspectionMode à l'échelle mondiale pour s'assurer que l'instantané représente la véritable sortie de production, similaire à la façon dont il remplace la vue. View.isInEditMode pour les vues héritées.
En tant que solution de contournement, nous vous recommandons d'envelopper un tel composable dans un composable personnalisé avec une CompositionLocalProvider et de régler LocalInspectionMode .
@Test
fun inspectionModeView () {
paparazzi.snapshot(
CompositionLocalProvider ( LocalInspectionMode provides true ) {
YourComposable ()
}
)
}Notre journal de changement a l'historique des versions.
Utilisation de l'application de plugin:
buildscript {
repositories {
mavenCentral()
google()
}
dependencies {
classpath ' app.cash.paparazzi:paparazzi-gradle-plugin:1.3.5 '
}
}
apply plugin : ' app.cash.paparazzi 'Utilisation des plugins DSL:
plugins {
id ' app.cash.paparazzi ' version ' 1.3.5 '
} Les instantanés de la version de développement sont disponibles dans le référentiel snapshots de 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.