首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不使用mock的情况下测试有副作用的函数组合?

如何在不使用mock的情况下测试有副作用的函数组合?
EN

Stack Overflow用户
提问于 2021-09-05 00:05:00
回答 1查看 97关注 0票数 2

我有一个函数MyComposedFunction,它是3个函数的组合。第二个函数fn2使用fn1的结果执行POST请求(副作用),并将该值传递给fn3

代码语言:javascript
运行
复制
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');

我希望避免为fn3fn2fn1编写单元测试,而只测试MyComposedFunction。我的理论基础是,只要MyComposedFunction正常工作,MyComposedFunction是否使用compose(...)或者是一个庞大的长函数都无关紧要。

有没有可能在不模拟fn2的情况下为MyComposedFunction编写测试

我认为,当尝试用JavaScript进行函数式编程时,这肯定是比较常见的情况,但到目前为止还没有找到有用的资源。

EN

回答 1

Stack Overflow用户

发布于 2021-09-08 06:54:24

您可以像这样将fetch依赖注入到您的函数中

代码语言:javascript
运行
复制
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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69059714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档