【发布时间】:2016-06-17 06:59:36
【问题描述】:
认为这是一个足够普遍的问题,可以通过自我回答的问题来分享。
一般场景
我有一个可能通过或失败的主要任务,我需要无条件地运行一个单独的任务作为拆卸。
我还需要 grunt 最终使用主任务的通过/失败状态退出。
具体场景
- 我需要在运行量角器之前进行一些设置。
- 运行量角器后我需要进行一些拆解。
- 设置和拆卸非常复杂,我不再愿意在量角器的 onPrepare 和 onCleanup 块中执行这些任务。
- 我想将这些设置和拆卸建模为在量角器作业之前和之后运行的单独的 grunt 任务。
- 无论量角器的通过/失败,我都需要每次都运行拆解
- 我需要 grunt 任务的最终退出代码来表示量角器的通过/失败。
假设我有一个名为 E2E 的任务(使用量角器进行 E2E 测试):
尝试1:
grunt.registerTask('E2E', ['setupProtractorEnvironment', 'protractor', 'teardownProtractorEnvironment']);
如果量角器失败,则不运行拆卸。
尝试2:添加 grunt-force-task
我可以使用grunt-force-task 解决部分问题,如下所示:
grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment']);
现在 teardownProtractorEnvironment 将始终运行,无论量角器是否失败,但退出代码现在始终为 0
尝试3:使用 grunt this.requires()
grunt.registerTask('exitWithProtractorStatus', function() {
this.requires(['protractor']);
return true;
})
grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment', 'exitWithProtractorStatus']);
现在量角器失败时,拆机仍在运行,但退出代码为 3(任务错误)
如果我想在 CI 中使用这个 grunt 任务并在量角器 E2E 失败时失败构建,最终的错误代码很重要。
HTH!
【问题讨论】:
标签: gruntjs protractor