Since subscriptions are just functions, you should easily be able to execute them. The signature of every subscription is (...params) => (dispatch) => cleanUpFn, so we know how to get the code to execute, and how to stop it, so what's preventing us from doing that? Let's take this subscription as an example:
Calling your subscription in a test can get you fairly far, but the real test is when your application expects some sort of payload from your subscription.
myApplication.spec.js
import { app, effects } from'ferp';import { intervalSub } from'./intervalSub.js';consttestify= (expectedActions, done) => (_, actionAnnotation) => {constactionName=expectedActions.unshift();expect(actionAnnotation).toBe(actionName);if (expectedActions.length===0) {returndone(); }};describe('myApplication', () => {it('runs an effect from mySubscription', (done) => {constmyAction= state => [false,effects.none()];app({ init: [true,effects.none()], observe:testify(['ferpAppInitialization',// this is just the action/annotation of `init`'myAction', ], done),subscribe: state => [ state && [intervalSub,1000, myAction], ], }); });});