[英]Unit testing JavaScript function with ForEach with Tape and 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;
}
这是我目前的测试:
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();
});
我看过文档,但是作为一个菜鸟,我不确定如何进行覆盖和测试突出显示的代码。
如果有人能帮助我或指出正确的方向,我将不胜感激。
谢谢
您不需要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
的字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.