Testing Your Effects
The Problem
The problem you will initially run into is this: I just want to test an effect, but I don't know how to run the effect on its own. Well, maybe you don't need to run the effect in isolation, and run it through a test app. This will keep your test reflecting the reality of how it is used, while also helping you isolate how the effect affects the state.
The Solution: End to End
Let's take the Custom Effects section example of notificationPermission and notification effects.
import { effects } from 'ferp'
export const notificationPermissionEffect = (
grantEffect,
denyEffect = effects.none,
dismissEffect = effects.none,
errorEffect = effects.none
) => effects.defer(
Notification.requestPermission()
.then((result) => {
switch (result) {
case 'granted':
return grantEffect();
case 'denied':
return denyEffect();
default:
return dismissEffect();
}
})
.catch(errorEffect)
);
export const notificationEffect = (title, options = {}, resultEffect = effects.none) => effects.thunk(() =>
resultEffect(new Notification(title, options))
);In this case, we have some browser specific code (ie the Notification class), so we'll just make a global/controllable mock for it. If you are building a browser-based ferp app, you may want to look into a modern browser based test framework. Let's set up a test using describe/it blocks, similar to what you'd seen in mocha or jest:
Last updated
Was this helpful?