Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida

TDD - Teste

describe("Números romanos e inteiros", function(){
    it("Transforme números romanos para números inteiros", function(){
        var transform = new Inteiros();

        expect(transform.toInter('IV')).toEqual(4);
    });
});

Produção

function Inteiros(){
    var myClass = {
        toInter: function(x){
            var numerosRomanos = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'];

            for(var i = 0; i < numerosRomanos.length; i++){
                if(x === numerosRomanos[i]){
                    return i + 1;
                } else {
                    return 'Por favor inserir apenas I a X';
                };
            };
        };
    };
    return myClass;
};

Por que o retorno sempre vem false? não está funcionado o retorno true. Quando eu tiro else e o teste passa, mas continuo sem entende.

5 respostas

Tente colocar o return do else fora do for, da seguinte maneira:

for(var i = 0; i < numerosRomanos.length; i++){
     if(x === numerosRomanos[i]){
          return i + 1;
     }        
};    
 return 'Por favor inserir apenas I a X';

Obrigado VInicius, você pode explicar pq For não funciona dentro else?

solução!

No seu caso o que estava acontecendo é o seguinte:

Como você colocou um "return" dentro do for, quando a primeira avaliação do if for feita, ela já vai retorna o valor e sair do seu for. Exemplo:

for(var i = 0; i < numerosRomanos.length; i++){
     if(x === numerosRomanos[i]){
        return i + 1;
     } else {
        return 'Por favor inserir apenas I a X';
     };
};

Na primeira iteração do for se o valor de "X "não for igual a "numerosRomanos[i]" então ele vai cair no ELSE que tem a instrução "return 'Por favor inserir apenas I a X';" que faz com que você saia do for e não faça as demais avaliações.

Para que tudo funcionasse apenas joguei a instrução do seu ELSE para fora do FOR isso faz com que ele execute todas as iterações e caso em nenhumas delas o resultado for true, seu loop do FOR termina e cai direto no return 'Por favor inserir apenas I a X';

Espero ter sido claro na minha explicação, mas caso tenha alguma dúvida se sinta a vontade em perguntar.

Entendi, mais uma vez obrigado!

Disponha! Não esqueça de fechar o tópico como solucionado.