即使先前的任务失败,也无条件地运行grunt任务,但维护失败的退出代码

时间:2016-06-17 06:59:37

标签: gruntjs protractor

认为这是一个足够普遍的问题,可以通过一个自我回答的问题进行分享。

一般情景

我有一个可能通过或失败的主要任务,我需要无条件地执行单独的任务作为拆解。

我还需要grunt最终使用主任务的通过/失败状态退出。

具体方案

  • 我需要在运行量角器之前进行一些设置。
  • 运行量角器后我需要做一些拆解。
  • 设置和拆卸非常复杂我不再习惯在量角器onPrepare和onCleanup块上执行这些任务。
  • 我想将这些设置和拆解模型化为在我的量角器工作之前和之后运行的单独的grunt任务。
  • 无论量角器的通过/失败,我都需要每次都进行拆卸
  • 我需要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!

1 个答案:

答案 0 :(得分:1)

如问题尝试3 所示,您可以添加使用grunt this.requires()的新任务来测试上一个任务的状态。

此处记录了

this.requireshttp://gruntjs.com/api/inside-tasks#this.requires。基本上它将失败当前任务,除非所有指定的“必需”任务已经运行并通过。