javascript - 使用 frisby.js 或 jasmine-node 测试证书过期

标签 javascript node.js jasmine-node frisby.js

我正在尝试使用 frisby.js 编写一个测试用例来检查证书的状态。测试应在证书过期前 n 天失败,其中 n 的定义如下:

config.numberOfDaysBeforeTestFails

我用这段代码尝试过:

var frisby = require('frisby');
var config = require('../config');  //load own config-file
var request = require('request');

frisby.create('https2.0 - Perperation')
 .get(config.server + '/testData')
 .auth(config.username, config.passwort)
 .after(function(err, res, body){
    var auth = "Basic " + new Buffer(config.username + ":" + config.passwort).toString("base64");
    var r = request({
        url: '<serverURL>',
        requestCert: true,
        rejectUnauthorized: false,
        headers : {
            "Authorization" : auth
        }
    });

    r.on('response', function(res) {
        var certificateInformation = res.req.connection.getPeerCertificate();
        var certificateDate = new Date(Date.parse(certificateInformation.valid_to));
        var todayDate = new Date();
        todayDate.setDate(todayDate.getDate() + config.numberOfDaysBeforeTestFails);
        //Below does not get executed
        expect(todayDate < certificateDate).toBe(true);
    });

})
.toss();

问题是,期望没有得到 jasmine-node 测试运行程序的验证。执行此代码

jasmine-node ./https_spec.js

将导致:

Finished in 0.358 seconds
1 test, 0 assertions, 0 failures, 0 skipped

所以断言

expect(todayDate < certificateDate).toBe(true);

没有被执行。我认为,这是因为 Nodejs 异步执行代码,因此测试在断言执行之前结束。

有人知道,我如何强制执行此断言并进入测试结果?

谢谢和问候, 乔

最佳答案

我没有找到基于 frisby.js 的解决方案,但使用用于异步支持的标准 jasmine 语法,它似乎有效。由于 frisby 测试是由 jasmine-node 运行程序执行的,因此我可以将其与其他 frisby 测试一起执行。

var request = require('request');    
var config = require('../config');  //load own config-file for global settings

describe("https 2.0", function() {

 it("Certificate Test", function(done) {
    var auth = "Basic " + new Buffer(config.username + ":" + config.passwort).toString("base64");
    var r = request({
        url: config.server,
        requestCert: true,
        rejectUnauthorized: false,
        headers : {
            "Authorization" : auth
        }
    });

    r.on('response', function(res) {
        var certificateInformation = res.req.connection.getPeerCertificate();
        var certificateDate = new Date(Date.parse(certificateInformation.valid_to));
        var todayDate = new Date();
        todayDate.setDate(todayDate.getDate() + config.numberOfDaysBeforeTestFails);
        expect(todayDate).toBeLessThan(certificateDate);
        done();
    });
  });
});

关于javascript - 使用 frisby.js 或 jasmine-node 测试证书过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501048/

相关文章:

javascript - 如何使用 AngularJS ui-router 在 Controller 中构建与 <ui-sref> 相同的 URL 而不是 HTML?

javascript - 将 this 和变量传递给导入函数 onclick

javascript - 如何让div元素包裹其他元素?(代码中存在伪选择器)

node.js - 通过 HTTPS 将 Node.JS 和 Unirest 用于 REST 客户端抛出证书问题

angularjs - 通过从 Mongoose 获取数据连接的 angularjs 自动完成

javascript - grunt Jasmine Node 测试运行两次

javascript - 树行者迭代

node.js - 如何防止 Node 在我的 NextJS/Express 应用程序中将异常记录到控制台?

javascript - 从 Node 使用 Jasmine 的正确方法是什么?

node.js - 使用 Protractor 作为库时“没有期望的方法”