`
linguagem` `
topico` `
nome`TDD javascript`
` `
titulo`TDD javascript`
` `
descritor`apoie, apoie.org, PAM, mutirão, produzir, aprender, simplificar, inovar, pesquisar , TDD`
` `
lead`Exemplo de um TDD - desenvolvimento de programa dirigido por teste. 
` `
melhorar`Melhorar`
` `
referenciaLivro TDD Kent Beck
Simulador python,js,java
Documento de trabalho
`
` `
origem`TddJs.xml`
` `
` `
topico` `
titulo`O problema`
` `
desc` Retornar o enésimo valor da sequência de Fibbonacci.
`
` `
` `
topico` `
titulo`Teste do programa`
` `
desc`
/*execução dos testes */
console.log ("Início da execução de testes:");
if ( 0 !== fib(0) )
    {console.log('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))};
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
ReferenceError: fib is not defined

`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar`
` `
desc`
/*definição da função*/
function fib(n){
    return 0; }


/*execução do teste*/
console.log ("Início da execução de testes:");
if ( 0 !== fib(0) )
    {console.log('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))};
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
Fim dos testes

`
` `
` `
topico` `
titulo`Adicionar teste`
` `
desc`
/*execução dos testes*/
/*definição da função*/
function fib(n){
    return 0; }

/*execução do teste*/
console.log ("Início da execução de testes:");
if ( 0 !== fib(0) )
    {console.log('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))};
if ( 1 !== fib(1) )
    {console.log('resultado esperado fib(1)=1', 'resultado obtido:', fib(1))};
console.log("Fim dos testes");


Resultado do teste de execução
Início da execução de testes:
resultado esperado fib(1)=1 resultado obtido: 0
Fim dos testes

`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar`
` `
desc`
/*definição da função*/
function fib(n){
if (n==0)    return 0;
if (n==1)    return 1;}

/*execução do teste*/
console.log ("Início da execução de testes:");
if ( 0 !== fib(0) )
    {console.log('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))};
if ( 1 !== fib(1) )
    {console.log('resultado esperado fib(1)=1', 'resultado obtido:', fib(1))};
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
Fim dos testes

`
` `
` `
topico` `
titulo`Refatorar função`
` `
desc`
/*definição da função*/
function fib(n){
return n;}

/*execução do teste*/
console.log ("Início da execução de testes:");
if ( 0 !== fib(0) )
    {console.log('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))};
if ( 1 !== fib(1) )
    {console.log('resultado esperado fib(1)=1', 'resultado obtido:', fib(1))};
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
Fim dos testes

`
` `
` `
topico` `
titulo`Adicionar teste`
` `
desc`
/*definição da função*/
function fib(n){
return n;}

/*execução do teste*/
console.log ("Início da execução de testes:");
if ( 0 !== fib(0) )
    {console.log('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))};
if ( 1 !== fib(1) )
    {console.log('resultado esperado fib(1)=1', 'resultado obtido:', fib(1))};
if ( 1 !== fib(2) )
    {console.log('resultado esperado fib(2)=1', 'resultado obtido:', fib(2))};
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
resultado esperado fib(2)=1 resultado obtido: 2
Fim dos testes

`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar`
` `
desc`
/*definição da função*/
function fib(n){
   if (n==2)  return 1;
   return n;}

/*execução do teste*/
console.log ("Início da execução de testes:");
if ( 0 !== fib(0) )
    {console.log('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))};
if ( 1 !== fib(1) )
    {console.log('resultado esperado fib(1)=1', 'resultado obtido:', fib(1))};
if ( 1 !== fib(2) )
    {console.log('resultado esperado fib(2)=1', 'resultado obtido:', fib(2))};
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
Fim dos testes

`
` `
` `
topico` `
titulo`Refatorar função`
` `
desc`
/*definição da função*/
function fib(n){
   if (n==2)  return 1;
   return n;}

/*execução dos testes*/
function teste(esperado, n){
    if (esperado !== fib(n))
        console.log("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n)) ;
    return;}

console.log ("Início da execução de testes:");
teste (0,0)
teste (1,1)
teste (1,2)
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
Fim dos testes

`
` `
` `
topico` `
titulo`Adicionar teste`
` `
desc`
/*definição da função*/
function fib(n){
   if (n==2)  return 1;
   return n;}

/*execução dos testes*/
function teste(esperado, n){
    if (esperado !== fib(n))
        console.log("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n)) ;
    return;}

console.log ("Início da execução de testes:");
teste (0,0)
teste (1,1)
teste (1,2)
teste (2, 3)
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
resultado esperado fib( 3 )= 2 resultado obtido: 3
Fim dos testes

`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar`
` `
desc`
/*definição da função*/
function fib(n){
    if (n > 1) {return n-1;}
       else {return n}
     };


/*execução dos testes*/
function teste(esperado, n){
    if (esperado !== fib(n))
        console.log("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n)) ;
    return;}

console.log ("Início da execução de testes:");
teste (0,0);
teste (1,1);
teste (1,2);
teste (2, 3);
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
Fim dos testes

`
` `
` `
topico` `
titulo`Refatorar função`
` `
desc`
/*definição da função*/
function fib(n){
    return (n>1 ? n-1 : n)
     };

/*execução dos testes*/
function teste(esperado, n){
    if (esperado !== fib(n))
        console.log("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n)) ;
    return;}

console.log ("Início da execução de testes:");
teste (0,0);
teste (1,1);
teste (1,2);
teste (2, 3);
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
Fim dos testes

`
` `
` `
topico` `
titulo`Adicionar teste`
` `
desc`
/*definição da função*/
function fib(n){
    return (n>1 ? n-1 : n)
     };

/*execução dos testes*/
function teste(esperado, n){
    if (esperado !== fib(n))
        console.log("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n)) ;
    return;}

console.log ("Início da execução de testes:");
teste (0,0);
teste (1,1);
teste (1,2);
teste (2, 3);
teste (8, 6)
console.log("Fim dos testes");

Resultado do teste de execução
Início da execução de testes:
resultado esperado fib( 6 )= 8 resultado obtido: 5
Fim dos testes

`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar`
` `
desc`
/*definição da função*/
function fib(n){
    return (n>1 ? fib(n - 1) + fib(n - 2) : n)
     };

/*execução dos testes*/
function teste(esperado, n){
    if (esperado !== fib(n))
        console.log("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n)) ;
    return;}

console.log ("Início da execução de testes:");
teste (0,0);
teste (1,1);
teste (1,2);
teste (2, 3);
teste (8, 6)
console.log("Fim dos testes");


Resultado do teste de execução
Início da execução de testes:
Fim dos testes


`
` `
` `
topico` `
titulo`Refatorar função`
` `
desc`
#definição da função
function fib(n): 
    return  n if n < 2 else fib(n - 1) + fib(n - 2)

# execução dos testes
function teste(esperado, n): 
    if esperado != fib(n):
        console.log("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))
   
console.log ("Início da execução de testes:")
teste (0, 0)
teste (1, 1)
teste (1, 2)
teste (2, 3)
teste (8, 6)
console.log("Fim dos testes")

Resultado do teste de execução
Início da execução de testes:
Fim dos testes


`
` `
` `
topico` `
titulo`Dicas`
` `
desc`
Sequência do TDD - sempre começa pelo teste

Repetir enquanto necessário:
  1. Adicionar teste (deve dar erro!)
  2. Alterar programa para teste funcionar (com o minimo de código)
  3. Refatorar programa ou teste (melhorar compreensão, tirar duplicatas, simplificar)

`
` `
` `
`