Cucumber-js: Adicione suporte para TypeScript

Criado em 13 mai. 2015  ·  33Comentários  ·  Fonte: cucumber/cucumber-js

Eu criei uma biblioteca com texto digitado e meus testes também são escritos em texto digitado. Eu realmente gostaria de experimentar o cucumber.js e criar arquivos de definição de etapas com typescript. Portanto, você oferece suporte a coffeescript e js, .ts também seria bom.

Cumprimentos

Chris

Comentários muito úteis

@jbpros desde que o leia-me foi atualizado, e isso aparece com destaque nos resultados de "cucumber typescript" , um trecho:

Transpiladores

-As definições de etapas e arquivos de suporte podem ser escritos em outras linguagens que podem ser transpiladas para javascript.
-Isso feito com a opção CLI --compiler <file_extension>:<module_name> . Para CoffeeScript 1.10.0,
-Isso é feito com --compiler coffee:coffee-script/register .
As definições de etapa e os arquivos de suporte podem ser escritos em outras linguagens que podem ser transpiladas para javascript. Isso é feito com a opção CLI --compiler <file_extension>:<module_name> .

CoffeeScript

Instale o pacote NPM do script de café e execute o Cucumber com --compiler coffee:coffee-script/register .

TypeScript

Instale o pacote NPM de nó de script e invoque Cucumber com --compiler ts:typescript-node/register .

Como de costume, toda a definição de etapa e arquivos de suporte devem exportar uma função a ser executada pelo Cucumber. É assim que é feito no TS:

declare var module: any;
module.exports = function () {
 this.Given(/.*/, function () {
   // ...
 })
}

PogoScript

Instale o pacote pogo NPM e execute o Cucumber com --compiler pogo:pogo .

Todos 33 comentários

Por que você não envia uma solicitação pull @ Chris2011

Serei apenas um cliente deste projeto, quando faço cada pull request de cada coisa que uso e há alguma faltando, então poderei criá-la por conta própria. É apenas um pedido de recurso. Se alguém tem tempo e gostaria de fazê-lo, por que não. Eu não, porque não tenho tempo, tenho o mesmo trabalho normal e outros projetos e não quero ser um colaborador em cada projeto que utilizo. Peço as palavras ásperas talvez mas pra mim fica claro que não dá pra ser colaborador de cada projeto, do que eu uso. Eu tenho que entender a fonte e assim por diante.

Eu entendo @ Chris2011. Talvez um dia alguém decida gastar tempo implementando isso porque quer ajudá-lo, ou apenas por diversão.

O cenário mais realista é que essa solicitação de recurso permaneça aberta até que alguém precise dela o suficiente para estar disposto a gastar tempo e esforço para implementá-la e enviar um PR.

Pode ser. Obrigado pela sua opinião. Na minha perspectiva, foi apenas lógico pedir esse recurso porque o TS será mais popular por 1 ou 2 anos. E quando você ou quem decidiu implementar o coffeescript também, por que não o datilografar também?

Muito obrigado. Veremos o que acontece...

Em geral - assim como os formatadores - eu gostaria de ter suporte a linguagem / dialeto para serem plug-ins de terceiros em vez de parte do núcleo (incluindo o CoffeeScript e PogoScript atuais).

TS +1

+1

Gosto disso, por favor faça isso algum tempo !!!

: +1:

Nenhuma quantidade de +1 ou: +1: fará isso acontecer. Alguém precisa enviar uma solicitação de pull.

: +1: @aslakhellesoy spot on

: 8ball: @samccone

@jbpros @aslakhellesoy a única coisa que deve ser feita para oferecer suporte a linguagens de terceiros é implementar uma maneira de modificar:

SupportCodePathExpander.SUPPORT_CODE_FILES_IN_DIR_REGEXP = /\.(js|coffee|pogo)$/;

E então qualquer um pode registrar qualquer transpiler em support/env.js por exemplo
talvez esta regex deva ser removida?

Estou feliz em ver isso. Consigo encontrar o arquivo de recurso coffeeScript, mas não consigo encontrar onde as definições de etapa são implementadas. Alguém poderia me dar algumas dicas sobre o que precisa ser feito?

@SeanFarrow Já fiz isso localmente. Você só precisa modificar /lib/cucumber//cli/argument_parser/support_code_path_expander.js:12 e, em seguida, adicionar qualquer transpiler via gancho

Você está ghoing para enviar um pr?

De: Aleh Kashnikau [mailto: [email protected]]
Enviado: 16 de agosto de 2015 19:15
Para: cucumber / cucumber-js [email protected]
Cc: Sean Farrow sean. [email protected]
Assunto: Re: [cucumber-js] Adicione suporte para TypeScript (# 335)

@SeanFa rrowhttps: //github.com/SeanFarrow Já fiz isso localmente. Você só precisa modificar /lib/cucumber//cli/argument_parser/support_code_path_expander.js:12 e, em seguida, adicionar qualquer transpiler por meio do gancho de requerer

-
Responda a este e-mail diretamente ou visualize-o em Gi tHubhttps: //github.com/cucumber/cucumber-js/issues/335#issuecomment -131598410.

@mkusher, há mais do que isso. Para ser completo, os trechos de definições de etapas também devem estar disponíveis na linguagem adicional (o que atualmente não é feito para PogoScript), consulte o sinalizador CLI --coffee .

Eu realmente gostaria que isso fosse feito através de um sistema de plug-in / transpiler de qualquer maneira e remover todos os dialetos do núcleo (incluindo coffeescript).

Não entendo por que o suporte específico para um idioma é necessário? Você não apenas transpilaria as definições de etapa para JavaScript como parte do seu processo de construção?

398 deve tornar o suporte a qualquer transpiler simples

Sim, # 398 vai consertar isso.

@henrify, a única coisa que "precisa" ser adicionada ao Cucumber é o suporte de fragmento de definição de etapa para outros idiomas. Atualmente eles estão em vanilla JS por padrão e podem ser impressos em CS com o sinalizador --coffee CLI.

Podemos simplesmente descartar trechos não-JS completamente (incluindo CS?). Pensamentos?

398 foi mesclado e estará disponível na próxima versão. O suporte do TypeScript está documentado no README .

@jbpros desde que o leia-me foi atualizado, e isso aparece com destaque nos resultados de "cucumber typescript" , um trecho:

Transpiladores

-As definições de etapas e arquivos de suporte podem ser escritos em outras linguagens que podem ser transpiladas para javascript.
-Isso feito com a opção CLI --compiler <file_extension>:<module_name> . Para CoffeeScript 1.10.0,
-Isso é feito com --compiler coffee:coffee-script/register .
As definições de etapa e os arquivos de suporte podem ser escritos em outras linguagens que podem ser transpiladas para javascript. Isso é feito com a opção CLI --compiler <file_extension>:<module_name> .

CoffeeScript

Instale o pacote NPM do script de café e execute o Cucumber com --compiler coffee:coffee-script/register .

TypeScript

Instale o pacote NPM de nó de script e invoque Cucumber com --compiler ts:typescript-node/register .

Como de costume, toda a definição de etapa e arquivos de suporte devem exportar uma função a ser executada pelo Cucumber. É assim que é feito no TS:

declare var module: any;
module.exports = function () {
 this.Given(/.*/, function () {
   // ...
 })
}

PogoScript

Instale o pacote pogo NPM e execute o Cucumber com --compiler pogo:pogo .

É realmente necessário usar um nó de script? É possível usar o tsc oficialmente suportado em vez do nó typescript? Não sei as diferenças, mas tsc é oficialmente suportado pela Microsoft.

@ Chris2011 ts-node é apenas um gancho de registro para node.js que executará a compilação via tsc

Ok, obrigado.

@JoshuaKGoldberg de onde está o trecho? Minhas pesquisas não conseguiram encontrá-lo.

Um exemplo para guiá-lo nos pepinos com uso de texto datilografado:
https://github.com/AbraaoAlves/cucumber-protractor-typescript-boilerplate

Obrigado @AbraaoAlves pela amostra.
Infelizmente, ele só funciona com o cucumberjs 1. A camada de estrutura do transferidor-pepino não é compatível com o cucumber2 rcs.

como anexar a captura de tela no relatório do pepino. Estou usando uma linguagem datilografada. Por favor, alguém me ajude.

Por favor, confirme se haveria problemas de compatibilidade pepino + Protractor + Typecript no futuro ... já que planejamos usar a combinação para nossas implementações.

@Rajazpandi
Faça algo assim em After

driver.takeScreenshot().then(data => {
        attach(new Buffer(data, 'base64'), 'image/png');
      }).catch(error => {
        info(error);
        throw error;
      });

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

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