当前位置:网站首页>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 实例。

边栏推荐
猜你喜欢

现代 ABAP 编程语言中的正则表达式

线上一次JVM FullGC搞得整晚都没睡,彻底崩溃

博云入选Gartner中国云原生领域代表性厂商

js判断一个对象是否在一个对象数组中

How to monitor code cyclomatic complexity by refactoring indicators

手把手教你搭建一个Minecraft 服务器

不需要服务器,教你仅用30行代码搞定实时健康码识别

Mysql Explain

Real-Time Rendering 4th related resource arrangement (no credit required)

[TA-Frost Wolf_may-"Hundred Talents Project"] Art 2.7 Metallic and Speculer Process
随机推荐
荐书 | 《大脑的奥秘:人人要懂的脑科学》:大脑里面有什么
C# 写系统日志
flink cdc怎么指定位点,从某个位点开始消费mysql的Binlog?
Beginner crawler notes (collecting data)
HCIP笔记(7)
【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
Minecraft 服务器安装Forge 并添加Mod
Mysql Explain
SAP HANA Schemas 和 HDI Containers
现代 ABAP 编程语言中的正则表达式
云存储硬核技术内幕——(13) 抓手,组合拳与闭环
Request method ‘POST‘ not supported。 Failed to load resource: net::ERR_FAILED
录音文件识别
农产品期货开户哪家好??
jasmine.any(Function) 的一个使用场景
不需要服务器,教你仅用30行代码搞定实时健康码识别
Minecraft HMCL 第三方启动器使用教程
张乐:研发效能的黄金三角及需求与敏捷协作领域的实践|直播回顾
跟我学 UML 系统建模
[TA-Frost Wolf_may-"Hundred Talents Project"] Art 2.7 Metallic and Speculer Process