Node.js 摩卡咖啡在一个回调里面
我是摩卡和诺德的新手 我正在尝试使用mocha编写一些测试,检查SSL证书的各种属性。我有一个函数Node.js 摩卡咖啡在一个回调里面,node.js,mocha.js,Node.js,Mocha.js,我是摩卡和诺德的新手 我正在尝试使用mocha编写一些测试,检查SSL证书的各种属性。我有一个函数getCert,它打开一个tls套接字 但是,我找不到一种方法来调用函数一次,并在getCert的回调上执行多个mocha测试 有可能这样做吗?这是我的密码 var assert = require('chai').assert; var tls = require('tls'); const moment = require('moment'); var hostToTest = 'www.go
getCert
,它打开一个tls套接字
但是,我找不到一种方法来调用函数一次,并在getCert
的回调上执行多个mocha测试
有可能这样做吗?这是我的密码
var assert = require('chai').assert;
var tls = require('tls');
const moment = require('moment');
var hostToTest = 'www.google.com';
//this is based a little on https://www.npmjs.com/package/certificate-monitor
function getCert(host, port, callback) {
let socketOptions = {
host: host,
port: port,
rejectUnauthorized: false,
requestCert: true,
agent: false,
authorized: null,
cert: null,
error: null,
daysRemaining: null
};
const socket = tls.connect(socketOptions, function() {
socketOptions.authorized = socket.authorized;
socketOptions.cert = socket.getPeerCertificate(true);
var expireDate = new Date(socketOptions.cert.valid_to).toJSON();
socketOptions.daysRemaining = moment(expireDate, moment.ISO_8601).diff(moment(), 'days');
socket.end();
callback(socketOptions);
});
socket.on('error', function (err){
socketOptions.error = err;
callback(socketOptions);
});
}
//This works, but I have to call getCert multiple times
describe('TLS Certificate Checks 1', function() {
it('Certificate should be trusted', function(done) {
getCert(hostToTest, 443, function(certResponse){
assert.isTrue(certResponse.authorized);
done();
});
});
it('Certificate should not be close to expirey', function(done) {
getCert(hostToTest, 443, function(certResponse){
assert.isAbove(certResponse.daysRemaining, 30);
done();
});
});
});
//this does nothing... is it possible to call getcert just once?
describe('TLS Certificate Checks 2', function() {
getCert(hostToTest, 443, function(certResponse){
it('Certificate should be trusted', function(done) {
assert.isTrue(certResponse.authorized);
done();
});
it('Certificate should not be close to expirey', function(done) {
assert.isBelow(certResponse.daysRemaining, 30);
done();
});
});
});
以下是上述代码的输出:
$mocha testssl.js
TLS Certificate Checks 1
✓ Certificate should be trusted (56ms)
✓ Certificate should not be close to expirey
2 passing (100ms)
摩卡咖啡中有一种叫做“钩子”的东西。您可以在运行每个测试之前调用getCert方法
describe('TLS Certificate Checks 2', function() {
var certResponse = null;
// THIS IS A HOOK
beforeEach(function(done) {
certResponse = null;
// runs before each test in this block
getCert(hostToTest, 443, function(result){
certResponse = result;
done();
});
});
// PUT TEST CASES HERE
it('Certificate should be trusted', function(done) {
assert.isTrue(certResponse.authorized);
done();
});
it('Certificate should not be close to expirey', function(done) {
assert.isBelow(certResponse.daysRemaining, 30);
done();
});
});
beforeach将在每次测试前运行。完美!非常感谢:)