-
Notifications
You must be signed in to change notification settings - Fork 11
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:
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?