2017-01-10 7 views
2

Я пытаюсь написать модульные тесты для кода узла с chai/chai-http. Все работало нормально, пока я не переключил свой сервер на HTTPS-сервер, но поскольку мой сертификат подписан внутренним корнем компании, а общее имя используемого сертификата не совпадает с localhost, chai бросает ошибку на мой запрос ,Установить принятый список CA и игнорировать ошибки SSL с chai-http

Я хотел бы сделать следующее:

  1. Игнорировать SSL ошибки, связанные с проверкой домена.

  2. Установить список ЦС для проверки. Если этого не сделать, мне будет хорошо, если вы просто пропустите все проверки сертификатов на стороне клиента.

Мой код выглядит следующим образом:

var chai = require('chai'); 
var chaiHttp = require('chai-http'); 
var https = require('https'); 
var fs = require('fs'); 
var server = require('../app.js'); 

chai.should(); 
chai.use(chaiHttp); 

https.globalAgent.options.ca = [ 
    fs.readFileSync('./ssl/Root.cer'), 
]; 

describe('Attachments', function() { 
    it('should succeed when passed valid arguments', function (done) { 
     chai.request(server) 
     .get('/10881057300D0A4E8E8586542AA3626E41') 
     .set('userId', 'user') 
     .set('region', 'US') 
     .end(function (err, res) { 
      chai.assert(res); 
      res.should.have.status(200); 
      chai.assert(res.body); 
      done(); 
     }); 
    }); 

    it('should return error without userId header', function (done) { 
     chai.request(server) 
     .get('/10881057300D0A4E8E8586542AA3626E41') 
     .end(function (err, res) { 
      chai.assert(res); 
      res.should.have.status(500); 
      chai.assert(res.type == 'application/json'); 
      done(); 
     }); 
    }); 
}); 

И я получаю следующую трассировку стека:

Uncaught AssertionError: Unspecified AssertionError 
    at test\test.js:21:18 
    at Test.Request.callback (node_modules\superagent\lib\node\index.js:615:12 
) 
    at ClientRequest.<anonymous> (node_modules\superagent\lib\node\index.js:56 
7:10) 
    at TLSSocket.socketErrorListener (_http_client.js:267:9) 
    at emitErrorNT (net.js:1253:8) 
+0

У меня есть один и тот же вопрос. Вы нашли решение? –

ответ

0

Я решил его предложение here.

Я думаю, что он отклоняется как недопустимый TLS. Несмотря на то, что мой не использовал недействительный сертификат, я предполагаю, что где-то в кишках он изменяет URL действительного сертификата на localhost или разрешает IP-адрес, который не связан с полным доменом сертификата, который я использую. Добавляя следующий код перед первым «описанием()», исправил его для меня.

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 

Вот полный тестовый код:

var chai = require('chai'); 
var chaiHttp = require('chai-http'); 
var server = require('../server'); 
var should = chai.should(); 

chai.use(chaiHttp); 

// This line allows use with https 
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 

describe('Auth', function() { 
    it('should return 401 with invalid credentials', function(done){ 
     chai.request(server) 
     .post('/api/v1/user/authenticate') 
     .send({"email":"[email protected]", "password": "password"}) 
     .end(function(err, res) { 
      res.should.have.status(401); 
      done(); 
     }); 
    }); 


});