UNPKG

apprun

Version:

JavaScript library that has Elm inspired architecture, event pub-sub and components

95 lines 2.98 kB
let win; app['debug'] = true; function openWin(name) { win = window.open('', name); win.document.write(`<html> <title>AppRun Analyzer | ${document.location.href}</title> <style> body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI" } </style> <body><pre>`); } function write(text) { win.document.write(text + '\n'); } function closeWin() { win.document.write(`</pre> </body> </html>`); win.document.close(); } const print_component_test = component => { write(`import ${component.constructor.name} from '../src/${component.constructor.name}'`); write(`describe('${component.constructor.name}', ()=>{`); component._actions.forEach(action => { if (action.name !== '.') { write(` it ('should handle event: ${action.name}', (done)=>{`); write(` const component = new ${component.constructor.name}().mount();`); write(` component.run('${action.name}');`); write(` setTimeout(() => {`); write(` \/\/expect(?).toHaveBeenCalled();`); write(` \/\/expect(component.state).toBe(?);`); write(` done();`); write(` })`); } }); write(`});`); }; export const _createEventTests = () => { const o = { components: {} }; app.run('get-components', o); const { components } = o; openWin(''); if (components instanceof Map) { for (let [key, comps] of components) { comps.forEach(print_component_test); } } else { Object.keys(components).forEach(el => { components[el].forEach(print_component_test); }); } closeWin(); }; let recording = false; let events = []; app.on('debug', p => { if (recording && p.vdom) { events.push(p); console.log(`* ${events.length} state(s) recorded.`); } }); export const _createStateTests = (s) => { const printTests = () => { if (events.length === 0) { console.log('* No state recorded.'); return; } openWin(''); events.forEach((event, idx) => { write(` it ('view snapshot: #${idx + 1}', ()=>{`); write(` const component = new ${event.component.constructor.name}()`); write(` const state = ${JSON.stringify(event.state, undefined, 2)};`); write(` const vdom = component['view'](state);`); write(` expect(JSON.stringify(vdom)).toMatchSnapshot();`); write(` })`); }); closeWin(); }; if (s === 'start') { events = []; recording = true; console.log('* State logging started.'); } else if (s === 'stop') { printTests(); recording = false; events = []; console.log('* State logging stopped.'); } else { console.log('create-state-tests <start|stop>'); } }; //# sourceMappingURL=apprun-dev-tools-tests.js.map