io.mockk.MockKException: Bad recording sequence. Please finalize every { ... } block with returns/answers/just Runs
class NoPermissionsPresenterTest : RxSpek({
val view = mockk<NoPermissionsContract.View> {
every { onVisibilityChangeObservable } returns Observable.just(true)
}
val navigator = mockk<NoPermissionsContract.Navigator> {
every { back() } returns Unit
}
val rxPermissions = mockk<RxPermissions> {
every { isGranted(any()) } returns true
}
val presenter by memoized(CachingMode.GROUP) {
NoPermissionsPresenter(
rxPermissions = rxPermissions,
navigator = navigator
)
}
describe("NoPermissionsPresenter tests") {
describe("view observables") {
beforeGroup {
presenter.attachView(view)
}
on("visibility change to true") {
view.onVisibilityChangeObservable.test()
it("check permissions") {
verify { rxPermissions.isGranted("") }
}
it("navigates back") {
verify { navigator.back() }
}
}
}
}
})
Hey, can I ask what was the problem?
In my case I forgot the returns statement after the every block with captured variables, e.g.:
val slot = slot<File>()
val fileRepo = mockk<FileRepository>()
every { fileRepo.upload(capture(slot), "test") }
correct was :
val slot = slot<File>()
val fileRepo = mockk<FileRepository>()
every { fileRepo.upload(capture(slot), "test") } returns "test"
Just in case someone stumbles on this, in my case it was having trouble with the answer being an expression/function.
every { mockObj.func() } returns someObject.fakeAnswer()
But this worked:
val fakeAnswer = someAnswerObject.funcAnswer()
every { mockObj.func()} returns fakeAnswer
@patrickcousins Ha, wasn't that fixed in 1.9.1 ? :smile: Now whole hierarchies are allowed in returns https://mockk.io/#hierarchical-mocking, there should be basically no limits on returns clause.
Most helpful comment
Just in case someone stumbles on this, in my case it was having trouble with the answer being an expression/function.
But this worked: