SAP Spartacus PageMetaService 的单元测试

test.js:

const FILE = ['./cms/facade/page-meta.service.spec.ts'];

context.keys().filter( name => !!FILE.includes(name)).map(context);

PageMetaService的作用是,解析到底有哪些 PageResolver 需要执行,并调度这些 PageResolver,执行对应方法。

这些 Page Resolver 的单元测试,位于文件 page-meta.service.spec.ts 内:

Page resolver 的实现,位于 page 文件夹内:

const PageMetaResolvers: PageMetaConfig = {
  pageMeta: {
    resolvers: [
      {
        property: 'title',
        method: 'resolveTitle',
      },
      {
        property: 'heading',
        method: 'resolveHeading',
      },
      {
        property: 'description',
        method: 'resolveDescription',
        disabledInCsr: true,
      },
      {
        property: 'image',
        method: 'resolveImage',
        disabledInCsr: true,
      },
      {
        property: 'breadcrumbs',
        method: 'resolveBreadcrumbs',
      },
      {
        property: 'robots',
        method: 'resolveRobots',
        disabledInCsr: true,
      },
    ],
    enableInDevMode: true,
  },
};

PageMetaResolver 是一个 abstract class:

PageWithAllResolvers:实现了很多接口的类

可以使用 disabledInCsr 禁掉某个 resolver:

如果在开发模式下,不应该执行被禁用的 resolver:

service 就是 PageMetaService,执行 getMeta 并且 subscribe 之后,会触发 page resolver 的执行。

先要执行该 Service 类的 CMS service,调用 getCurrentPage 拿到当前 CMS 页面类型,再根据页面类型拿到负责的 Meta Resolver,最后调用 Resolver 进行解析。

这就是 determine 出来的解析器:


看注释:在 SSR 模式下,总是执行:

要执行这三个方法:


更多Jerry的原创文章,尽在:"汪子熙":


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章