jasmine.any(Function) 的一个使用场景

举报
汪子熙 发表于 2022/08/04 15:42:40 2022/08/04
【摘要】 显然,Web 应用中某些功能比其他功能更容易测试。 例如,可以轻松测试纯函数,因为它的返回值对于相同的参数是相同的,并且它的评估没有副作用。 另一方面,一个 UI 组件(例如日历组件)可能有多个子组件、各种输入和输出,并且依赖于外部 API。 有时,很难说测试应该有多彻底。 在某些情况下,验证 happy path 可能就足够了。 在其他情况下,当它是关键软件部分时,您可能希望检查所有边缘情...

显然,Web 应用中某些功能比其他功能更容易测试。 例如,可以轻松测试纯函数,因为它的返回值对于相同的参数是相同的,并且它的评估没有副作用。 另一方面,一个 UI 组件(例如日历组件)可能有多个子组件、各种输入和输出,并且依赖于外部 API。 有时,很难说测试应该有多彻底。 在某些情况下,验证 happy path 可能就足够了。 在其他情况下,当它是关键软件部分时,您可能希望检查所有边缘情况。

在各种边缘情况的测试用例编写中,就是 jasmine.any(Function) 大显身手的时候。该函数的一个使用场景:

it(`should pass parameters to the original engine instance`, () => {
      expect(originalEngineInstance).toHaveBeenCalledWith(
        mockPath,
        mockOptions,
        jasmine.any(Function)
      );
    });

语义:

originalEngineInstance 被调用时,传递的第三个参数是任意的函数,即 jasmine.any(Function) 返回的引用。

但是,这个任意的函数,不能是 mockCallback.

it(`should apply optimization wrapper`, () => {
      // we check, that callback is not the original one
      expect(originalEngineInstance).not.toHaveBeenCalledWith(
        mockPath,
        mockOptions,
        mockCallback
      );
    });

我们可以通过调试的方式,找到运行时第三个参数,实际是一个定义如下的函数:

而 jasmine.any(Function) 返回的引用,如下图绿色高亮区域所示:

真实被调用的 callback 是这个:

即代码228行指定的函数:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。