[Enhancment] Calling `expectSelfie()` from another package
- Dominant language
- Kotlin
- Stars
- 101
- Forks
- 18
- PR merge metrics
- No merged PRs in 30d
Description
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:
```kt
package mypackage.errors
abstract class ErrorSpec(
private val clazz: KClass,
private val create: () -> T
) :
FunSpec({
context("Localisation") {
forAll(Exhaustive.collection(SUPPORTED_LOCALES)) {
expectSelfie(json.encodeToString(clazz.serializer(), create())).toMatchDisk()
}
}
})
class ErrorTest : ErrorSpec(
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?
Contributor guide
Assessment
This issue has not been assessed yet.