Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Enhancment] Calling `expectSelfie()` from another package

Abierto
#541 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
kotlin
Área
testing

Línea de trabajo

Empieza reproduciendo el ejemplo de ErrorSpec entre paquetes e inspecciona SelfieImplementations/DiskSelfie.toMatchDisk(), especialmente el comportamiento alrededor de la línea 38 y la búsqueda del código fuente de CallLocation. Compáralo con toMatchDisk_TODO(). Se considera terminado cuando la API pública puede validar y escribir snapshots desde otro paquete sin depender del comportamiento de TODO ni sobrescribirlos en cada ejecución.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

jvm question

Hello, the library is pretty useful, but I'm stumbling into a problem that I'm not sure how to fix.

Using Kotest, I want to create a reusable Spec to snapshot tests my custom exceptions and their localization.
It ends up looking kind of like this:

package mypackage.errors

abstract class ErrorSpec<T : Error>(
    private val clazz: KClass<T>,
    private val create: () -> T
) :
    FunSpec({
        context("Localisation") {
            forAll(Exhaustive.collection(SUPPORTED_LOCALES)) {

                expectSelfie(json.encodeToString(clazz.serializer(), create())).toMatchDisk()

            }
        }
    })

class ErrorTest : ErrorSpec<Error>(
    clazz = Error::class,
    create = { Error() }
)

This work perfectly, until I put ErrorSpec in another package.
The main reason I want to do this is to use a testFixtures.

This then ends up failing at runtime with:

org.opentest4j.AssertionFailedError:
Couldn't find source file for CallLocation(
    clazz=mypackage.ErrorSpec$1$1,
    method=invokeSuspend,
    fileName=Specs.kt,
    line=36
),

looked in TypedPath(absolutePath=[...]/mypackage/src/test/kotlin/)
and [[...]/mypackage/src/test/resources],

maybe there are other source roots?

What I don't understand is that, if I use toMatchDisk_TODO() instead of toMatchDisk(), the snapshot files end up being written, but the tests fails on writeLine.

Manually changing the value of isTodo to true in SelfieImplementations/DiskSelfie.toMatchDisk():38, the tests pass successfully, with the snapshot file being written at the correct place (albeit being overwritten every run, which kind of defeat the point).

Is there a way to do what I want using the public API?
If not, would it be possible to implement?

Lenguaje dominante
Kotlin
Estrellas
101
Forks
18
Merge medio
6 d 11 h
PR fusionados (30 d)
5

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de diffplug/selfie

Todos los issues de diffplug/selfie

Issues similares

Más issues de Kotlin

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.