认为这是一个足够普遍的问题,可以通过一个自我回答的问题进行分享。
一般情景
我有一个可能通过或失败的主要任务,我需要无条件地执行单独的任务作为拆解。
我还需要grunt最终使用主任务的通过/失败状态退出。
具体方案
假设我有一个名为E2E的任务(使用量角器进行E2E测试):
Attempt1:
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!
答案 0 :(得分:1)
如问题尝试3 所示,您可以添加使用grunt this.requires()
的新任务来测试上一个任务的状态。
this.requires
:http://gruntjs.com/api/inside-tasks#this.requires。基本上它将失败当前任务,除非所有指定的“必需”任务已经运行并通过。