Tengo una función, MyComposedFunction , que es la composición de funciones de 3 funciones, la segunda función, fn2 , realiza una solicitud POST (un efecto secundario) utilizando el resultado de fn1 y pasa este valor a fn3 .
const fn2 = async (fn1Result) => { const result = await fetch(fn1Result.url, fn1Result.payload); // some business logic return fn2Results; }; const MyComposedFunction = compose(fn3, fn2, fn1); // My Test expect(MyComposedFunction('hello world')).toBe('expected result'); Me gustaría evitar escribir pruebas unitarias para fn3 , fn2 y fn1 y, en su lugar, solo probar MyComposedFunction . Mi razón es que no debería importar si MyComposedFunction usa compose(...) o es una función gigante larga mientras MyComposedFunction funcione.
¿Es posible escribir una prueba para MyComposedFunction sin tener que simular fn2 ?
Creo que esta debe ser una situación relativamente común al intentar hacer una programación funcional en JavaScript, pero hasta ahora no he podido encontrar un recurso útil.
Puede depender inyectar fetch en su función así
const fn2Thunk = (fetcher = fetch) => async (fn1Result) => { const result = await fetcher(fn1Result.url, fn1Result.payload); // some business logic return fn2Results; }; const fetchMock = async () => ({ result: "blah" }) const MyComposedFunctionTest = compose(fn3, fn2Thunk(fetchMock), fn1); // My Test const result = await MyComposedFunctionTest('hello world') expect(result).toBe('expected result');