Cucumber-js: Substitua process.exit () por process.exitCode

Criado em 3 ago. 2017  ·  6Comentários  ·  Fonte: cucumber/cucumber-js

Seria possível substituir as chamadas process.exit () (um par em run.js é tudo que consegui encontrar) por process.exitCode de acordo com a recomendação Node.js vinculada abaixo. No meu caso, o Cucumber.js encerra o Node antes que o logger de arquivos assíncronos tenha a chance de liberar, entre outras operações pendentes possíveis no loop de eventos.

https://nodejs.org/api/process.html#process_process_exit_code

É importante observar que chamar process.exit () forçará o processo a sair o mais rápido possível, mesmo se ainda houver operações assíncronas pendentes que ainda não foram totalmente concluídas, incluindo operações de E / S para process.stdout e process.stderr . Na maioria das situações, não é realmente necessário chamar process.exit () explicitamente. O processo Node.js será encerrado por conta própria se não houver trabalho adicional pendente no loop de eventos. A propriedade process.exitCode pode ser definida para informar ao processo qual código de saída usar quando o processo for encerrado normalmente.

help wanted good first issue

Comentários muito úteis

Hesito em fazer isso, pois acho que outros usuários podem ter problemas (estou pensando principalmente naqueles que o usam para testar o navegador, que é onde me lembro de tê-lo travado). Além disso, essa recomendação de nó só existe na versão 6 e 8. Ela não existe na versão 4, que será compatível até abril de 2018 (quando o nó deixa de ser compatível). Eu seria bom em adicionar uma opção CLI para isso. Algo como --drain-event-loop que usará process.exitCode em vez de process.exit.

Todos 6 comentários

Você pode esperar que o logger termine em uma definição de gancho / etapa? Lembro-me com cautela de que houve muitos casos em que o cucumber-js não saía porque estava esperando que tudo saísse do ciclo de eventos

A solução alternativa atual que estou usando é um setTimeout arbitrário em AfterFeatures , mas depois de aprender mais cedo sobre exitCode e revisitar o hack devido à próxima registerHandler depreciação I editei o run.js local e parece funcionar muito bem. Definitivamente, vale a pena revisitar devido a 1) recomendação oficial do Node, 2) atraso por processo que o setTimeout fictício apresenta ao executar em paralelo e 3) ao executar o Cucumber por outro processo do Node.

Pensei nisso para sempre, mas o tempo limite em etapas individuais não cuidaria de algo infinito? Deve haver uma maneira elegante de solicitar uma saída com tempo limite no Node sem encerrar imediatamente.

registerHandler('AfterFeatures', function (features, callback) {
  setTimeout(callback, 1000);
});

Hesito em fazer isso, pois acho que outros usuários podem ter problemas (estou pensando principalmente naqueles que o usam para testar o navegador, que é onde me lembro de tê-lo travado). Além disso, essa recomendação de nó só existe na versão 6 e 8. Ela não existe na versão 4, que será compatível até abril de 2018 (quando o nó deixa de ser compatível). Eu seria bom em adicionar uma opção CLI para isso. Algo como --drain-event-loop que usará process.exitCode em vez de process.exit.

Só quero acrescentar que esse problema apresenta um problema real para executar Cucumber.js como um processo filho. Estou fazendo isso com --format json , e se minha saída crescer além do tamanho do bloco de 8K do fluxo padrão, eu só recebo o primeiro bloco de volta antes que process.exit do pepino termine prematuramente o processo filho, truncando a saída. Tirei process.exit e o problema foi resolvido.

Vou tentar enviar uma solicitação pull para isso em breve.

Apresentei uma solicitação de pull, embora esteja incompleta de acordo com a solução preferida de

Eu tenho uma solução alternativa para o problema específico que estava enfrentando, que era que executar Cucumber.js em um processo filho com o formatador JSON estava truncando a saída após o primeiro fragmento de fluxo stdout, porque process.exit é uma saída difícil esse processo filho não espera pelo resto. A solução foi apenas adicionar | cat ao comando do meu processo filho, e isso me permitiu receber a saída completa no processo pai.

Qualquer pessoa seria bem-vinda para adicionar ao PR acima, ou pode ser apropriado mesclá-lo como está em alguns meses quando a versão 4 se pôr.

Este tópico foi bloqueado automaticamente, pois não houve nenhuma atividade recente depois que foi fechado. Abra um novo problema para bugs relacionados.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

stefdelec picture stefdelec  ·  6Comentários

igniteram picture igniteram  ·  7Comentários

edwinwright picture edwinwright  ·  3Comentários

pellekrogholt picture pellekrogholt  ·  3Comentários

hdorgeval picture hdorgeval  ·  3Comentários