当前位置:网站首页>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 实例。
边栏推荐
- gcc7.5.0编译ceres-solver报错‘is_trivially_default_constructible’ is not a member of ‘std’
- 寻找消失的类名
- #夏日挑战赛# HarmonyOS 实现一个滑块验证
- 软考 --- 软件工程(2)软件开发方法
- B 站又上热搜了, HR 称「核心用户都是 Loser」
- Check which user permissions are assigned to each database, is there an interface for this?
- Summary of some pytorch knowledge points that have been updated for a long time
- 【IDEA】idea配置
- 历史上的今天:微软研究院的创始人诞生;陌陌正式上线;苹果发布 Newton OS
- UWP 转换 IBuffer 和其他类型
猜你喜欢
LeetCode·每日一题·1403.非递增顺序的最小子序列·贪心
开源一夏 | 请你谈谈网站是如何进行访问的?【web领域面试题】
游戏云服务器配置怎么选合理?
不需要服务器,教你仅用30行代码搞定实时健康码识别
Analysis of Http-Sumggling Cache Vulnerability
软考 --- 软件工程(2)软件开发方法
8年软件测试感悟,送给刚入测试行业的小伙伴
How to monitor code cyclomatic complexity by refactoring indicators
LeetCode·84.柱状图中最大的矩形·单调递增栈
吴恩达机器学习[11]-机器学习性能评估、机器学习诊断
随机推荐
Redis持久化操作
数据分析入门导读
如何防止重复下单?
面试官:多个线程执行完毕后,才执行另一个线程,该怎么做?
软件性能测试包括哪些内容?国内权威软件检测机构排名
Pulsar消费者处理不当导致的消息积压问题
LeetCode·每日一题·1403.非递增顺序的最小子序列·贪心
An article to answer what is the product library of the DevOps platform
C# 写系统日志
SQL语言的分类以及数据库的导入
游戏云服务器配置怎么选合理?
手把手教你搭建一个Minecraft 服务器
Matlab计算随模拟时间变化的热导率
To ensure that the communication mechanism
字节API鉴权方法
Minecraft 我的世界 .minecraft下的各个文件夹的用处
dot net double 数组转 float 数组
项目里的各种配置,你都了解吗?
全球电子产品需求放缓 三星手机越南工厂每周只需要干 3~4 天
Check which user permissions are assigned to each database, is there an interface for this?