Quero reutilizar alguns passos do Pepino, mas não consigo encontrar o caminho certo.
Eu quero escrever uma etapa como:
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
Mas então dê outra etapa como:
Given /^I login successfully$
# call "Given I login with valid credentials"
end
Portanto, ao testar a autenticação do usuário, posso usar o primeiro, mas na maioria dos outros lugares, posso usar o último e não preciso reproduzir o código.
Existe uma maneira de chamar essa outra etapa ou apenas coloco a lógica em um método auxiliar e chamo esse método de cada tarefa (basicamente uma refatoração de extração de método, que, após ler minha pergunta, me faz acreditar que é realmente a melhor maneira de qualquer forma)?
do
necessário para iniciar odo...end
bloco na definição da etapa Ruby. Na verdade, é necessário.Respostas:
ATUALIZAÇÃO : o método descrito abaixo foi descontinuado. A maneira recomendada de chamar uma etapa de dentro de outra etapa agora se parece com esta:
Método antigo e obsoleto (para referência):
Você pode chamar etapas de outras etapas como esta:
Se todos os cenários dentro de um recurso exigirem esta (ou outras etapas), você também pode adicionar um Plano de Fundo a cada recurso, com as etapas comuns, como:
fonte
steps %Q{Given I am logged in}
steps
método não existia. Veja minha resposta abaixo.Observe que o método para chamar as etapas dentro das etapas mudou nas versões recentes do pepino, que você verá se receber um erro como "AVISO: o uso de 'Dado / Quando / Então' nas definições da etapa está obsoleto, use 'etapa' para chame outras etapas: /path/to/step_definitions/foo_steps.rb: 631: in `block in '". Veja a wiki do pepino para detalhes.
A essência da mudança é que agora você deve usar os métodos
step
ousteps
.fonte
syntax error, unexpected tIDENTIFIER, expecting keyword_end
stackoverflow.com/questions/43319331/…Chamar etapas a partir de definições de etapas é uma prática ruim e tem algumas desvantagens :
Aslak Hellesøy recomenda extrair ações populares para o World em vez de reutilizar etapas. Ele isola essas ações em um lugar, torna este código mais fácil de localizar. Você também pode extrair código para classes ou módulos Ruby usuais.
Aqui está uma discussão útil sobre o assunto na lista de discussão do Pepino - link
fonte
Melhor envolver suas etapas em% {} em vez de aspas. Então, você não precisa escapar as aspas duplas, que você precisará usar com freqüência:
fonte
Reutilize palavras-chave no arquivo de recurso que fornecerá capacidade de reutilização de código.
É altamente NÃO recomendado chamar step defs dentro de step defs.
Eu escreveria meu arquivo de recurso desta forma,
Na minha definição de etapa, (isto é Java)
Dessa forma, há muita capacidade de reutilização do código. Seu mesmo Dado e Então lida com cenários válidos e inválidos. Ao mesmo tempo, seu arquivo de feição faz sentido para os leitores.
fonte