如何配置Gradle BuildTypes,仅在Jest测试通过后执行构建?
在Android构建前强制执行React Native Jest测试的Gradle配置
没问题,我帮你搞定这个问题!你之前的任务只是打印文本,没有实际执行Jest测试,这就是构建异常的核心原因之一。我们需要创建一个能真正运行测试的Gradle任务,再让构建任务依赖它,这样测试失败时就能直接终止构建流程。
第一步:创建执行Jest测试的Gradle任务
在你的android/app/build.gradle文件中,把这段代码放在android块的外部(比如dependencies块之后):
task runJestTests(type: Exec) { // 指向React Native项目根目录(默认Android模块在根目录的android文件夹下) workingDir rootProject.projectDir // 执行npm测试命令,用yarn的话改成 ['yarn', 'test'] commandLine 'npm', 'run', 'test' // 关键配置:测试失败时(退出码非0)直接终止Gradle构建 ignoreExitValue false // 将测试日志输出到Gradle控制台,方便查看失败原因 standardOutput = System.out errorOutput = System.err }
第二步:让构建任务绑定测试任务
根据你的需求,有两种绑定方式可选:
方式1:所有构建前都执行测试
如果你希望debug、dev、staging、release所有构建类型都先跑测试,就添加这段代码:
// 让所有assemble类型的任务都依赖Jest测试 tasks.withType(Assemble) { dependsOn runJestTests }
方式2:仅针对特定BuildType执行测试
如果只想在发布类构建(比如release、staging)前跑测试,就单独指定这些任务:
// 给release构建绑定测试 tasks.named('assembleRelease') { dependsOn runJestTests } // 给staging构建绑定测试 tasks.named('assembleStaging') { dependsOn runJestTests } // 如需给dev/debug添加,同理复制上面的代码修改任务名即可
额外注意事项
- 如果Gradle提示找不到npm/yarn命令,可以使用命令的绝对路径,比如Mac/Linux下的
/usr/local/bin/npm,Windows下的C:/Program Files/nodejs/npm.cmd。 - 若你的Jest测试脚本名不是
test(比如自定义为jest),记得修改commandLine里的参数。 - 测试失败时,Gradle会直接输出Jest的错误日志,并终止后续构建,完全符合你的需求。
现在你可以尝试运行构建命令(比如./gradlew assembleDebug),Gradle会先执行Jest测试,只有测试全部通过才会继续构建流程。
内容的提问来源于stack exchange,提问作者David Geismar
相关产品推荐
相关产品推荐

