callFake的接口定义可以在jasmine.js中找到:SpyStrategy.callFake,返回一个Spy对象。spy1是originalEngine,都指向同一个对象实例:只要调用spy1或originalEngine的函数,就会返回callFake指定的mock版本的实现:returnoriginalEngineInstance,也是一个mock对象。引擎本身是SpartacusSSR标准的实现。装饰器返回的新函数可以执行了:这个函数通过一个闭包保存了入参ngExpressEngine的引用,后者已经被mock过:当在第50行调用这个引擎函数时,被执行的ngExpressEngine就是被mock过的functionspy1:一旦spy1被调用,它会返回该函数的mock版本,即返回originalEngineInstance的实例。更多Jerry原创文章在这里:《王子熙》:
