SAPSpartacus完成定义)编码指南Spartacus团队采用了以下规则集来保持Spartacus代码的可读性和可维护性。作为贡献者,我们要求您遵守这些规则(即使您发现它们在某处被违反)。当文件不一致地遵循这些规则时,请遵循本地风格,遵循它们会使您的代码变得更糟。TL;DR您可以运行位于项目根目录的build.sh脚本。它将运行下面提到的大部分检查或规则,如linting和prettier检查,运行单元测试和端到端测试等。:yarnlint我们还鼓励您在VSCode中使用TSLint插件。编码格式我们使用Prettier来格式化我们的代码(并使其更漂亮)。要检查所有文件是否经过美化,请运行以下命令:yarnprettier要格式化和美化您的代码库,请运行以下命令:yarnprettier:fix我们还鼓励使用PrettierVSCode插件。有关详细信息,请参阅Spartacus的开发工具。SCSS是预处理的(node-sass)我们对所有CSS使用Sass,然后使用node-sass将其转换为CSS。使用以下命令预处理projects/storefrontstyearnsass中的Sass单元测试Spartacus代码需要单元测试。确保新功能或错误有单元测试并确保它们通过。运行以下命令来运行库的单元测试:yarntest[project]yarnteststorefrontlib运行测试时,Chrome打开,您可以看到测试的进度和详细信息,包括测试是否通过。单元测试代码覆盖率请确保所有单元测试覆盖率>=80%,分支>=60%。要获取测试覆盖率报告,请运行以下命令:yarntest[project]--code-coverageyarnteststorefrontlib--code-coverage或者,您可以运行以下命令:yarntest[project]--code-coverageyarntest:core:lib覆盖率报告可以在./coverage/index.html中找到。Spartacus中的端到端测试所有新功能都需要用Cypress编写的端到端测试。确保新功能具有端到端测试并且它们正在通过。在适用的情况下,编写端到端测试以确保您的新功能或更新后的功能完美无缺。如果编写端到端测试有意义,那么最低要求是编写基本的UI端到端测试。您还可以考虑使用用户流编写UI端到端测试,但这是可选的。必须审查、更新或重用所有新编写的端到端测试。他们还应该遵循端到端测试指南。运行以下命令以执行端到端测试:结束测试,请确保在projects/storefrontapp-e2e-cypress中安装依赖项并确保应用程序正在运行。端到端测试的目标是确保您的功能正常运行。例如,如果您要实现一个带有两个按钮(例如登录和取消按钮)的简单登录屏幕,您可以编写以下测试:使用有效凭据登录尝试使用无效凭据登录填写输入字段并单击取消按钮。注意:E2E测试目前只能在SAP中运行。我们正在努力向贡献者公开E2E测试。浏览器兼容性对于满足完成定义的新功能,至少,新功能必须已成功手动进行,快乐路径测试,在以下浏览器的最新主要版本中没有明显的布局问题:ChromeFirefoxSafariEdgeTheLibraryBuildsWithoutErrorsRun以下命令确保库构建无误:yarnbuild:libsShell无错启动noerrors当我转到主页时,Chrome中的JS控制台没有错误。Shell应用程序中的一项新功能HappyPath运行该功能的冒烟测试,部署在Shell应用程序的库中。然后确定新功能是否需要更改shell应用程序或配置文件。一些文件和概念存在于shell应用程序本身中。问问自己新代码是否需要更新shell应用程序或配置文件。以下更改可能是候选者:添加或更改路由添加或更改模块(更改路径或名称)添加组件添加模块更改配置机制的工作方式。验证生产构建是否有效运行以下命令以验证生产构建是否有效,尤其是提前(AOT)编译器:yarnbuild:libsyarnstart以下是生产构建可能失败的一些原因:由于AOT我们必须明确指定某些类型,例如函数返回类型。尽管TypeScript不需要它们,但它可以推断出它们。使用index.ts文件(即存储桶文件)时要小心。运行生产构建时,您可能会在节点/webpack控制台中看到以下错误:ERRORin:Encounteredundefinedprovider!通常这意味着你有一个循环依赖(可能是由使用'barrel'index.ts文件引起的。这通常是由导入语句引起的,例如:import*asfromServicesfrom'../../services'。相反,您应该具体导入每个类,如下例所示:import{OccCmsService}from"../../services/occ-cms.service";import{DefaultPageService}from"../../services/默认页面。服务";
