respond-framework
Version:
create as fast you think
58 lines (54 loc) • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _reactTestRenderer = require("react-test-renderer");
var _matchSnapshots = require("./matchSnapshots.js");
const createTrigger = (respond, renderer) => async (e, meta, conf = {}, revived) => {
const event = respond.eventsByType[e.type];
const arg = revived ? e.arg : e.arg ? respond.revive(e.arg) : undefined;
const snapMore = (conf.snapTrigger || conf.snapAll) && snap.bind(null, respond, renderer, e, conf);
const unsub = snapMore && respond.subscribe(snapMore, conf.snapAll); // subscribe(cb, true) for snapping all reductions/dispatches, subscribe(cb) for just trigger
await (0, _reactTestRenderer.act)(async () => {
await event.trigger(arg, meta);
await renderer.render(); // optimization: if we aren't snapping triggers to capture loading states, then we only need to commit updates to the component tree once after awaiting trigger and all possible nested events dispatched
await jest.runAllTimersAsync();
});
unsub?.();
};
var _default = exports.default = createTrigger;
const snap = (respond, renderer, eTest, conf, state, e) => {
if (!renderer._renderer) return; // no need to snap trigger before initial render
if (e.meta.trigger) {
eTest = {
...eTest,
snipes: eTest.triggerSnipes
};
conf = {
...conf,
snapState: false,
// by default turn these thints for trigger snaps
logState: false,
testIDs: false,
snipes: false,
...conf.snapTrigger,
// can supply `true` or object with overrides
suffix: 'trigger'
};
} else {
conf = {
...conf,
snapState: false,
// by default turn these thints for trigger snaps
logState: false,
testIDs: false,
snipes: false,
...conf.snapIntermediateStates,
// can supply `true` or object with overrides
suffix: 'intermediate'
};
}
(0, _reactTestRenderer.act)(() => respond.commit());
(0, _matchSnapshots.default)(respond, renderer, eTest, conf);
};