Angular:运行Git push时如何强制运行单元测试?

Posted

技术标签:

【中文标题】Angular:运行Git push时如何强制运行单元测试?【英文标题】:Angular: How to force run unit tests when running Git push? 【发布时间】:2019-02-22 20:45:05 【问题描述】:

我见过 Angular 项目,其中每次执行构建以及运行 git push 命令时都会运行单元测试。如果在任一命令期间任何测试失败,则在所有单元测试通过或绕过之前,该过程不会执行。我想为我的项目进行这种设置作为最佳实践。请帮忙:)

【问题讨论】:

我认为在运行git push 时运行单元测试不是一个好主意,因为它们是两个不同且独立的进程,它们应该保持原样。更好的方法是实现一个 pre-commit 钩子,如果有任何失败的测试,它会阻止提交代码。 你应该看看 husky,它会帮助你直接从你的 package.json 创建一个 git 钩子。也就是说,我认为这样做不是一个好主意,除非你的测试很少,或者它们运行得非常快。否则你会感到非常无聊。没有人愿意等待 500 万个才能推送。你应该依赖你的 CI。预提交或预推送钩子适用于快速处理,例如 linting(甚至可能需要太多时间)或运行更漂亮。 使用包调用哈士奇。有了它,您不必担心创建文件夹或文件。 【参考方案1】:

要在提交或推送之前运行构建、单元测试等,您可以使用Husky 之类的工具。

【讨论】:

【参考方案2】:

Git 提供了一种使用 .git/hooks 挂钩事件的方法

您可以在项目中添加一个名为.git/hooks 的文件夹,并在该文件夹中添加一个名为pre-commit 的子文件夹,您可以在其中放置要运行的脚本。这就是您的测试命令。

例如 test.sh 将包含:ng test

更多关于挂钩 git 事件的文档可以在这里找到:https://git-scm.com/docs/githooks

如果您有任何问题,请告诉我,我很乐意修改我的答案!

【讨论】:

不是.githooks,是.git/hooks @phd 你是对的,我的错误,答案已被编辑/更新!谢谢!【参考方案3】:

添加一个名为 husky 的包作为 devDependencies。

npm i husky --save-dev

现在使用 husky 捕获 pre-commit webhook,在您的 package.json 中执行此操作,添加此对象:

"husky": 
   "hooks": 
       "pre-commit": "ng test"
   

这将确保每次提交时,ng 测试 在实际提交发生之前运行。

【讨论】:

如何在 pre-commit 中添加多个命令,如 ng lint、ng e2e、ng test 等? 您可以在一行中组合多个命令,例如“ng lint && ng e2e && ng test”

以上是关于Angular:运行Git push时如何强制运行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁止GitLab分支被push

如何禁止GitLab分支被push

运行 git heroku push master 时出现致命错误

如何禁止GitLab分支被push

git强制push

gitpush前一定要切换到对应分支吗