2017-07-10 1 views
0

Je n'arrive pas à tester la fonction suivante. En particulier, je ne peux pas l'obtenir pour couvrir le code mis en évidence:Test de l'unité Fonction JavaScript avec ForEach avec bande et Sinon

function authCert(trustedCAFile){ 
    let ca = []; 
    let cert = []; 
    let trustedCA = String(fs.readFileSync(trustedCAFile)); 
    let trustedCALines = trustedCA.split("\n"); 

    trustedCALines.forEach(function(entry){ 

    cert.push(entry); 
    if(entry.match(/-END CERTIFICATE-/)){ 
     **ca.push(cert.join("\n")); 
     cert = [];** 
    } 
}); 

return ca; 
} 

Voici mon test en cours:

let test = require('tape'); 
let rewire = require('rewire'); 
let sinon = require('sinon'); 
let fs = require('fs'); 
let proxyquire = require('proxyquire'); 

test('should cycle through trusted ', function(t) { 
    let authCert = rewire('../authCert'); 
    let getAuthCerts = certUtils.getAuthCert; 

    let certStub = 'test'; 

    let fsStub = { 
     readFileSync:() => {} 
    }; 

    let ca = []; 
    ca.push('1'); 

    certUtils.__set__('fs', fsStub); 

    let result = getAuthorisedCerts(certStub); 

    t.deepEquals(result, []); 
    t.end(); 

}); 

J'ai regardé la documentation, mais comme un noob je ne suis pas sûr comment s'y prendre pour obtenir couverture et tester le code en surbrillance.

Si quelqu'un pouvait m'aider ou me diriger dans la bonne direction, je serais très reconnaissant.

Merci

Répondre

0

Vous n'avez pas besoin proxyquire (pas réellement utilisé) ou rewire pour faire le test que vous voulez faire.

Nous pouvons simplement utiliser sinon pour remplacer l'objet fs pour les tests.

En ce qui concerne l'obtention de la couverture souhaitée, tout ce que vous deviez faire était de faire en sorte que le talon readFileSync renvoie effectivement quelque chose contenant au moins un '-END CERTIFICATE-'.

const test = require('tape'); 
const sinon = require('sinon'); 
const fs = require('fs'); 

const certUtils = require('../authCert'); 
const caFilePath = 'test'; 

test('should return each certificate', function(t) { 
    const fileContents = 'cert1\n-END CERTIFICATE-\ncert2\n-END CERTIFICATE-'; 
    const fsStub = sinon.stub(fs, 'readFileSync').returns(fileContents); 
    const result = certUtils.getAuthCert(caFilePath); 

    fsStub.restore(); 

    t.deepEquals(result, ['cert1\n-END CERTIFICATE-', 'cert2\n-END CERTIFICATE-']); 
    t.end(); 
}); 

J'ai pris quelques libertés en termes de let/const et structurer le fichier, les principaux changements dont vous avez besoin faites le talon retourne la chaîne que j'ai appelé fileContents.