当前位置:网站首页>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 实例。
边栏推荐
猜你喜欢
随机推荐
在Markdown文件中快速插入本地图片
js判断一个对象是否在一个对象数组中
HCIP笔记(7)
花了半个月,终于把一线大厂高频面试题做成合集了
招募 | 香港理工大学Georg Kranz 博士诚招博士
闭包及闭包的使用
生产环境重大bug,update加上索引字段会走索引进行更新?还是走全表扫描
For循环控制
Typora收费?搭建VS Code MarkDown写作环境
Minecraft HMCL 第三方启动器使用教程
吴恩达机器学习[13]-支持向量机
荐书 | 《大脑的奥秘:人人要懂的脑科学》:大脑里面有什么
DMS 有接口获取每个实例下的数据库列表吗
No server is required, teach you to get real-time health code recognition with only 30 lines of code
codeforces:808D. Array Division【二分 + 找规律】
#夏日挑战赛# HarmonyOS 实现一个滑块验证
广东湛江海关破获3起走私冻海产品案 查证案值约1亿元
第三章 Scala运算符
Difference between GET and POST requests
视频字幕API接口文档