2017-07-10 3 views
0

私は以下の関数をユニットテストするのに苦労しています。特に、私はそれがハイライトされたコードをカバーするために取得することはできません。ForEach with Tape and SinonによるユニットテストJavaScript関数

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; 
} 

これが私の現在のテストです:

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(); 

}); 

私はドキュメントを見てきましたが、noobのように私は得ることについて行くのかわかりませんよ強調表示されたコードをテストします。

誰かが私を助けたり、正しい方向に向いてくれたら、私はとても感謝しています。

おかげ

答えて

0

あなたがやりたいテストを行うためにproxyquire(実際に使用されていない)、またはrewireを必要としません。

sinonを使用して、fsオブジェクトをテスト用にスタブすることができます。

あなたが望むカバレッジを得るために、readFileSyncスタブが少なくとも1つの'-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(); 
}); 

私はあなたが必要とする重要な変更は、スタブは私がfileContents呼んでいる文字列を返す作っている、let/constの面でいくつかの自由を取って、ファイルを構築しました。

関連する問題