git 预提交挂钩单元测试

7qhs6swi  于 2023-04-04  发布在  Git
关注(0)|答案(3)|浏览(142)

我正在尝试运行一个pre-commit钩子,如果我的单元测试没有运行,它会阻止我提交。现在我有一个shell脚本来运行测试,我的终端告诉我测试失败了,这很好。但是我不确定在我的Shell脚本中放置什么,一旦我的终端检测到我有失败的测试,就可以停止我的提交。像这样:

我倾向于认为我所缺少的只是一个简单的if语句,它检查测试是否失败,然后停止提交,如果测试通过,然后完成提交。但我可能完全错了,这是我第一次使用shell脚本,所以我真的不知道如何去做。谢谢。

8yparm6h

8yparm6h1#

当测试失败时,您需要确保脚本以非零的退出代码退出。
从Git文档:
以非零状态退出此脚本会导致git commit命令在创建提交之前中止。
https://git-scm.com/docs/githooks
基本上,如果测试失败,执行exit 1,否则执行exit 0。现在,您可能在所有情况下都执行exit 0(或只是让脚本结束)。
最有可能的是,您的单元测试已经返回了一个有效的退出代码,您可以使用它来确定脚本的退出代码。
一个简单的方法是这样的:

<run unit tests>
EXIT_CODE=$?
...
exit EXIT_CODE
d8tt03nd

d8tt03nd2#

这个在**.git/hooks/pre-commit**中的简单shell脚本对我很有用。

#!/bin/sh
npm run test || exit 1

如果npm运行测试失败,它会将控制传递给exit,exit失败并返回正错误代码以终止程序。如果通过,则永远不会执行exit语句。

whlutmcx

whlutmcx3#

我的maven项目的.pre-commit-config.yaml文件如下所示。

repos:
-   repo: https://github.com/ejba/pre-commit-maven
    rev: v0.3.3
    hooks:
    -   id: maven-test

参考:https://github.com/ejba/pre-commit-maven
你也可以 checkout 完整的预挂接列表here,我相信会有可用的钩子运行单元测试的语言你正在寻找,而不是运行单元测试使用shell脚本。

相关问题