Few more things got released all at once:
Funny Gistsโ
I added a playground page with three interesting code snippets for Kea:
- A quick Kea GraphQL client
- A plugin to measure the window's dimensions
- A rough sketch of the Kea DevTools
They are all too rough to be released as official plugins yet, but can already help in some situations.
If you have the time, feel free to contribute new gists or improve on the existing ones!
WaitForโ
The kea-waitfor
plugin lets you await
for actions.
It's great if you're writing tests and want to wait for something to happen before leaving the test
import { kea } from 'kea'
import { waitForAction } from 'kea-waitfor'
const logic = kea({
actions: () => ({
setValue: value => ({ value }),
valueWasSet: value => ({ value })
}),
listeners: ({ actions }) => ({
setValue: async ({ value }) => {
await delay(300)
actions.valueWasSet(value)
}
})
})
logic.mount()
logic.actions.setValue('hamburger')
const { value } = await waitForAction(logic.actions.valueWasSet)
console.log(value)
// --> 'hamburger'
There's also a waitForCondition
that lets you ask custom questions from the dispatched
actions.
const { value } = await waitForCondition(action => {
return action.type === logic.actions.valueWasSet.toString() &&
action.payload.value === 'cheeseburger'
})
In addition, the plugin documentation includes examples for waiting for different cominations of actions:
- Wait for all to be dispatched
- Wait for the first one of many (race)
- Timeout on the waiting
Testing docsโ
Inspired by a Github Issue, I wrote a quick doc about unit testing kea logic. Feedback and contributions are very welcome!