我正在尝试运行一个pre-commit钩子,如果我的单元测试没有运行,它会阻止我提交。现在我有一个shell脚本来运行测试,我的终端告诉我测试失败了,这很好。但是我不确定在我的Shell脚本中放置什么,一旦我的终端检测到我有失败的测试,就可以停止我的提交。像这样:
我倾向于认为我所缺少的只是一个简单的if语句,它检查测试是否失败,然后停止提交,如果测试通过,然后完成提交。但我可能完全错了,这是我第一次使用shell脚本,所以我真的不知道如何去做。谢谢。
8yparm6h1#
当测试失败时,您需要确保脚本以非零的退出代码退出。从Git文档:以非零状态退出此脚本会导致git commit命令在创建提交之前中止。https://git-scm.com/docs/githooks基本上,如果测试失败,执行exit 1,否则执行exit 0。现在,您可能在所有情况下都执行exit 0(或只是让脚本结束)。最有可能的是,您的单元测试已经返回了一个有效的退出代码,您可以使用它来确定脚本的退出代码。一个简单的方法是这样的:
exit 1
exit 0
<run unit tests> EXIT_CODE=$? ... exit EXIT_CODE
d8tt03nd2#
这个在**.git/hooks/pre-commit**中的简单shell脚本对我很有用。
#!/bin/sh npm run test || exit 1
如果npm运行测试失败,它会将控制传递给exit,exit失败并返回正错误代码以终止程序。如果通过,则永远不会执行exit语句。
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脚本。
3条答案
按热度按时间8yparm6h1#
当测试失败时,您需要确保脚本以非零的退出代码退出。
从Git文档:
以非零状态退出此脚本会导致git commit命令在创建提交之前中止。
https://git-scm.com/docs/githooks
基本上,如果测试失败,执行
exit 1
,否则执行exit 0
。现在,您可能在所有情况下都执行exit 0
(或只是让脚本结束)。最有可能的是,您的单元测试已经返回了一个有效的退出代码,您可以使用它来确定脚本的退出代码。
一个简单的方法是这样的:
d8tt03nd2#
这个在**.git/hooks/pre-commit**中的简单shell脚本对我很有用。
如果npm运行测试失败,它会将控制传递给exit,exit失败并返回正错误代码以终止程序。如果通过,则永远不会执行exit语句。
whlutmcx3#
我的maven项目的.pre-commit-config.yaml文件如下所示。
参考:https://github.com/ejba/pre-commit-maven
你也可以 checkout 完整的预挂接列表here,我相信会有可用的钩子运行单元测试的语言你正在寻找,而不是运行单元测试使用shell脚本。