- Instalaciones:
yarn add --dev jest babel-jest @babel/preset-env @babel/preset-react
yarn add --dev @testing-library/react @types/jest jest-environment-jsdom
- Opcional: Si usamos Fetch API en el proyecto:
| import arrow.Kind | |
| import arrow.core.ForEither | |
| import arrow.core.Option | |
| import com.txusballesteros.codelabs.billboard.api.movie.MovieApi | |
| import com.txusballesteros.codelabs.billboard.core.domain.mapper.map | |
| import com.txusballesteros.codelabs.billboard.core.domain.model.Movie | |
| internal class MovieCloudDataSource<F>( | |
| private val api: MovieApi |
| package com.fortyseven.fptraining | |
| import arrow.core.Either | |
| import arrow.core.right | |
| import arrow.effects.IO | |
| import arrow.effects.extensions.io.fx.fx | |
| data class Account(val balance: Int) | |
| data class AccountEntity(val balance: Int) |
| import android.animation.ValueAnimator | |
| import android.content.Context | |
| import android.graphics.* | |
| import android.util.AttributeSet | |
| import android.util.TypedValue | |
| import android.view.View | |
| import android.view.animation.DecelerateInterpolator | |
| class OnboardingPageIndicatorView @JvmOverloads constructor( | |
| context: Context, |
| package com.txusballesteros.mytaxi.core.domain.repository | |
| import com.pholser.junit.quickcheck.generator.GenerationStatus | |
| import com.pholser.junit.quickcheck.generator.Generator | |
| import com.pholser.junit.quickcheck.random.SourceOfRandomness | |
| import com.txusballesteros.mytaxi.core.domain.model.MapState | |
| class MapStatePropertyGenerator: Generator<MapState>(MapState::class.java) { | |
| companion object { | |
| private val MINIMUM_VALUE = 0 |
| class NowPlayingCloudDataSourceTest : UnitTest() { | |
| companion object { | |
| private const val PAGE = 123 | |
| private val MODEL = MovieApiModel( | |
| 1, | |
| "originalTitle", | |
| "en", | |
| "title", | |
| "overview", | |
| "2017-08-23", |
| <?xml version="1.0" encoding="utf-8"?> | |
| <android.support.constraint.ConstraintLayout | |
| xmlns:android="http://schemas.android.com/apk/res/android" | |
| xmlns:app="http://schemas.android.com/apk/res-auto" | |
| android:layout_width="match_parent" | |
| android:layout_height="match_parent" | |
| android:background="#b2ebf2"> | |
| <android.support.constraint.ConstraintLayout | |
| android:layout_width="110dp" |
| package com.txusballesteros.instrumentacion.assertion | |
| import android.support.test.espresso.EspressoException | |
| import android.support.test.espresso.ViewAssertion | |
| import android.support.test.espresso.matcher.ViewMatchers.assertThat | |
| import android.support.v7.widget.RecyclerView | |
| import android.view.View | |
| import android.view.View.FIND_VIEWS_WITH_TEXT | |
| import android.widget.TextView | |
| import org.hamcrest.Matchers.greaterThan |
| import android.support.v7.widget.RecyclerView | |
| import android.view.View | |
| import android.view.View.GONE | |
| import android.view.View.VISIBLE | |
| fun RecyclerView.setEmptyView(view: View) { | |
| adapter?.apply { | |
| val observer = object: RecyclerView.AdapterDataObserver() { | |
| override fun onChanged() { | |
| view.visibility = if (adapter.isEmpty()) VISIBLE else GONE |
| machine: | |
| environment: | |
| _JAVA_OPTIONS: "-Xms512m -Xmx1024m" | |
| ANDROID_HOME: /usr/local/android-sdk-linux | |
| GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError"' | |
| dependencies: | |
| pre: | |
| - echo y | android update sdk --no-ui --all --filter tools,platform-tools,android-25 | |
| - echo y | android update sdk --no-ui --all --filter build-tools-25.0.2 |