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的原創文章,盡在:"汪子熙":


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