当前位置:网站首页>SAP 电商云 Spartacus UI SSR 单元测试里的 callFake
SAP 电商云 Spartacus UI SSR 单元测试里的 callFake
2022-08-04 16:17:00 【华为云】
装饰好的 engine 调用 setup options:


engine 指的是下图这段绿色代码:
现在准备执行下面这段代码了:
准备调用被 mock 过的 engine 函数:
即下图 1 的函数:
只要 spy 被调用,其调用时传入的参数,必定可以被记录:
看这段代码:

jasmine.objectContaining 的适用场合:
jasmine.objectContaining 用于那些期望只关心实际中的某些键/值对的时候。
把这段代码改造一下:
it(`should pass setup options to the original engine`, () => { const jerry = jasmine.arrayContaining([ { provide: 'testToken', useValue: 'testValue' }, ]); expect(originalEngine).toHaveBeenCalledWith( jasmine.objectContaining({ bootstrap: 'TestModule', providers: jerry }) ); });jasmine.objectContaining 返回的类型为:jasmine.ArrayContaining

ArrayContaining 类型定义如下:
单步调试:

返回的是一个新的 matcher?

就是一个简单的构造器:
而 objectContaing 的逻辑类似,也是一个简单的构造器。

把这两个对象进行比较:
实际参数:
最后返回 true:
callFake 的接口定义可以在 jasmine.js 里找到:

SpyStrategy.callFake, 返回 Spy 对象。

spy1 即 originalEngine,二者指向同一个对象实例:

只要 spy1 即 originalEngine 这个函数被调用,则返回 callFake 指定的 mock 版本的实现:return originalEngineInstance,后者也是个 mock 对象。
engine 本身是 Spartacus SSR 标准的实现,被 decorator 之后返回的新的函数,可以执行:

该函数通过闭包的方式,保存了输入参数 ngExpressEngine 的引用,而后者已经被 mock 过了:

当第50行调用这个 engine 函数时,
执行的 ngExpressEngine 即是 mock 过的函数 spy1:

spy1 一旦被调用,就会返回 mock 版本的函数,即返回 originalEngineInstance 实例。

边栏推荐
- dot net core 使用 usb
- 面渣逆袭:MySQL六十六问,两万字+五十图详解
- js判断一个对象是否在一个对象数组中
- C# 写系统日志
- Matlab计算随模拟时间变化的热导率
- 人造肉在中国还有未来吗?
- UWP 转换 IBuffer 和其他类型
- 容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
- "Research Report on the Development of Global Unicorn Enterprises in the First Half of 2022" released - DEMO WORLD World Innovation Summit ended successfully
- 【Jprofile 11.0 安装】
猜你喜欢

LeetCode·每日一题·1403.非递增顺序的最小子序列·贪心

勒索软件的原理

在Markdown文件中快速插入本地图片

It took half a month to finally make a collection of high-frequency interview questions of first-tier manufacturers

面渣逆袭:MySQL六十六问,两万字+五十图详解

seaborn

成功 解决 @keyup.enter=“search()“ 在el-input 组件中不生效的问题

Real-Time Rendering 4th相关资源整理(无需积分 传火)

07-输入输出系统

不需要服务器,教你仅用30行代码搞定实时健康码识别
随机推荐
“敏捷欺骗了开发人员”
The electromagnetic compatibility EMC protection study notes
越来越火的图数据库到底能做什么?
张乐:研发效能的黄金三角及需求与敏捷协作领域的实践|直播回顾
全球电子产品需求放缓 三星手机越南工厂每周只需要干 3~4 天
DocuWare Platform - Content Services and Workflow Automation Platform for Document Management (Part 1)
codeforces:808D. Array Division【二分 + 找规律】
在Markdown文件中快速插入本地图片
手把手教你搭建一个Minecraft 服务器
云存储硬核技术内幕——(9) 相见时难别亦难
It took half a month to finally make a collection of high-frequency interview questions of first-tier manufacturers
现代 ABAP 编程语言中的正则表达式
Visual Studio 2022创建项目没有CUDA模板的解决方法
游戏云服务器配置怎么选合理?
How to monitor code cyclomatic complexity by refactoring indicators
Minecraft 我的世界 .minecraft下的各个文件夹的用处
JVM调优-GC基本原理和调优关键分析
推荐 7 月份 yyds 的开源项目
软件性能测试包括哪些内容?国内权威软件检测机构排名
不需要服务器,教你仅用30行代码搞定实时健康码识别