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 实例。
更多 Jerry 的原创文章,尽在:” 汪子熙 ”: