我有一个函数MyComposedFunction,它是3个函数的组合。第二个函数fn2使用fn1的结果执行POST请求(副作用),并将该值传递给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');我希望避免为fn3、fn2和fn1编写单元测试,而只测试MyComposedFunction。我的理论基础是,只要MyComposedFunction正常工作,MyComposedFunction是否使用compose(...)或者是一个庞大的长函数都无关紧要。
有没有可能在不模拟fn2的情况下为MyComposedFunction编写测试
我认为,当尝试用JavaScript进行函数式编程时,这肯定是比较常见的情况,但到目前为止还没有找到有用的资源。
发布于 2021-09-08 06:54:24
您可以像这样将fetch依赖注入到您的函数中
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');https://stackoverflow.com/questions/69059714
复制相似问题