使用mocha / superagent测试本地https服务器

时间:2014-08-19 13:55:55

标签: node.js ssl mocha superagent

所以我看到几个月前有一个拉取请求让superagent允许你在请求中指定CA.似乎没有更新文档来反映这种变化,所以我似乎无法弄清楚如何去做。

我正在尝试在我的本地计算机上测试一个暴露http和https端点的REST服务。所有的http工作正常,SSL的工作......好吧.....不是那么多。

昨天花了一整天的时间来减少证书错误,我90%确定我的服务器正常运行。 Curl似乎这么认为,就像一个vanilla节点请求对象一样。

我认为superagent可能会在引擎盖下创建一个请求 - 我只需要知道如何传入CA.

提前致谢。

2 个答案:

答案 0 :(得分:3)

他们的测试中有usage example

基本上:

var https = require('https'),
    fs = require('fs'),
    key = fs.readFileSync(__dirname + 'key.pem'),
    cert = fs.readFileSync(__dirname + 'cert.pem'),
    assert = require('better-assert'),
    express = require('express'),
    app = express();

app.get('/', function(req, res) {
    res.send('Safe and secure!');
});

var server = https.createServer({
    key: key,
    cert: cert
}, app);

server.listen(8443);

describe('request', function() {
    it('should give a good response', function(done) {
        request
            .get('https://localhost:8443/')
            .ca(cert)
            .end(function(res) {
                assert(res.ok);
                assert('Safe and secure!' === res.text);
                done();
            });
    });
});

答案 1 :(得分:0)

这对我有用:

    ...
    var user = request.agent({ca: cert});
    ...

完整示例:

var expect = require('chai').expect;
var should = require('should');
var request= require('superagent');
var fs = require('fs');
var cert = fs.readFileSync('sslcert/server.crt', 'utf8');

var validUser = { username: 'test@test.com', password: 'secret111' };

describe('User', function() {
    // provide certificate as agent parameter
    var user = request.agent({ca: cert});

    it("/login", function(done) {
        user
            .get('https://localhost:3000/login')
            .end(function(err, res) {
                if(err) throw err;
                // HTTP status should be 200
                res.status.should.equal(200);
                user
                    .post('https://localhost:3000/login')
                    .send(validUser)
                    .end(function(err, res) {
                        if(err) throw err;
                        // HTTP status should be 200
                        res.status.should.equal(200);
                        done();
                        // user will manage its own cookies
                        // res.redirects contains an Array of redirects
                    });
            });
    });

    it("/", function(done) {
        user
            .get('https://localhost:3000/')
            .end(function(err, res) {
                if(err) throw err;
                // HTTP status should be 200
                res.status.should.equal(200);
                done();
        });
    });

    it("/logout", function(done) {
        user
            .get('https://localhost:3000/logout')
            .end(function(err, res) {
                if(err) throw err;
                // HTTP status should be 200
                res.status.should.equal(200);
                done();
            });
    });

});