我正在努力对以下功能进行单元测试。特别是我无法覆盖突出显示的代码:
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();
});
我查看了文档,但作为一个菜鸟,我不确定如何获得覆盖率并测试突出显示的代码。
如果有人能帮助我或指出我正确的方向,我将非常感激。
由于
答案 0 :(得分:0)
您不需要proxyquire
(实际未使用)或rewire
来进行您想要进行的测试。
我们可以使用sinon
来存储测试的fs
对象。
在获得您想要的覆盖范围方面,您需要做的就是让readFileSync
存根实际返回包含至少一个'-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();
});
我在let/const
和构造文件方面采取了一些自由,你需要的关键更改是使存根返回我称之为fileContents
的字符串。