用mocha / superagenttesting本地https服务器

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

我正在尝试在本地机器上testing公开http和https端点的REST服务。 所有的http工作正常,SSL的….好…..没有那么多。

昨天花了整整一天跑完证书错误,我90%肯定我有服务器正常工作。 curl似乎是这样想的,香草节点请求对象也如此。

我认为superagent可能是在引擎盖下创build一个请求 – 我只需要知道如何通过在CA为它。

提前致谢。

Solutions Collecting From Web of "用mocha / superagenttesting本地https服务器"

在他们的testing中有一个使用例子 。

基本上:

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(); }); }); }); 

这对我工作:

  ... 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(); }); }); });