使用mocha和supertest测试NodeJS HTTPS API - "DEPTH_ZERO_SELF_SIGNED_CERT"错误

16

我需要使用mochasupertest测试通过HTTPS提供的API(证书未过期)。

以下是服务器的要点:

...
var app = express();
var _options = {
    key: fs.readFileSync('my-key.pem');,
    cert: fs.readFileSync('my-cert.pem')
};

// Start HTTPS server
https.createServer(_options, app).listen(app.get('port'), app.get('ip'), function () {

 // ok or not logs

});

这是需要测试的路线。

app.get('/hello',function (req, res) {
   res.json(200);
});

我试图使用位于test/test.js的代码进行测试。

    var supertest = require('supertest'),
        api = supertest('https://localhost:3000');

describe('Hello test', function () {

      it('hello', function (done) {

        api.get('/hello')
               .expect(200)
               .end(function (err, res) {
                                        if (err) {
                                                   done(err);
                                        } else {
                                                   done();
               }
         });
    });
});

但是测试结果FAILs,并显示以下错误:

    enter Error: DEPTH_ZERO_SELF_SIGNED_CERT
  at SecurePair.<anonymous> (tls.js:1349:32)
  at SecurePair.EventEmitter.emit (events.js:92:17)
  at SecurePair.maybeInitFinished (tls.js:962:10)
  at CleartextStream.read [as _read] (tls.js:463:15)
  at CleartextStream.Readable.read (_stream_readable.js:320:10)
  at EncryptedStream.write [as _write] (tls.js:366:25)
  at doWrite (_stream_writable.js:219:10)
  at writeOrBuffer (_stream_writable.js:209:5)
  at EncryptedStream.Writable.write (_stream_writable.js:180:11)
  at write (_stream_readable.js:573:24)
  at flow (_stream_readable.js:582:7)
  at Socket.pipeOnReadable (_stream_readable.js:614:5)
  at Socket.EventEmitter.emit (events.js:92:17)
  at emitReadable_ (_stream_readable.js:408:10)
  at emitReadable (_stream_readable.js:404:5)
  at readableAddChunk (_stream_readable.js:165:9)
  at Socket.Readable.push (_stream_readable.js:127:10)
  at TCP.onread (net.js:526:21)

使用普通的 HTTP 时,测试结果为 PASSING

1个回答

18

这只是为了其他跟我一样疑惑该怎么做的人而言。 将下面的代码添加到你的test.js文件开头,问题就会得到解决:

```javascript // 在这里添加代码 ```
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

如果要对很多测试进行此操作,我建议在 makefile 中添加 NODE_TLS_REJECT_UNAUTHORIZED=0,这样它将为所有测试设置。类似这样的命令:NODE_ENV=test NODE_TLS_REJECT_UNAUTHORIZED=0 ./node_modules/.bin/mocha --recursive --timeout 5000 --reporter spec "./**/modules/*/test/**/*.js" - Diosney
1
因某些原因,此设置在Node12中不再起作用。 - pengz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接