문제

익스프레스에 의해 실행되는 HTTPS 서버가 있습니다.

내 문제는 테스트 만 실행하면 - ok. Test로 그르르템 필일을 실행하려고하면 Express를 실행하십시오. App.Close ()를 사용하여 수행 한 테스트 파일에있는 경우에도 EaddrinUse 오류가 많이 있습니다. 테스트에서 작업을 시청하는 데 동일한 적용됩니다.

여기에 내 exapmle 테스트가 있습니다 :

/* jshint node: true*/
/*global describe, it, after*/
(function() {
    'use strict';
    process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
    var request = require('supertest');
    var app = require('../server.js').app;
    var expect = require('chai').expect;
    var Cookies;

    after(function(done) {
        app.close();
        setTimeout(function(){done();}, 1500);
    });

    describe('/login', function() {
        it('should auth the user', function(done) {
            request(app)
                .post('/login')
                .send({login: "test", password: 'test'})
                .expect(302)
                .end(function(err, res) {
                    expect(err).to.be.equal(null);
                    expect(res.text).to.be.equal("Moved Temporarily. Redirecting to /");
                    Cookies = res.headers['set-cookie'].pop().split(';')[0];
                    done();
            });

        });
    });
    // testing API for serving session data for angualar factory
    describe('/api/session', function() {
        it('should return session data in JSON', function(done) {
            var req = request(app).get('/api/session');             
                req.cookies = Cookies;
                req.set('Accept','application/json')
                .end(function(err, res) {
                    expect(err).to.be.equal(null);
                    expect(res.body).to.have.property("_id");
                    done();
            });
        });
    });

}());
.

IM은 그 테스트가 완벽한 것과는 거리가 멀다는 것을 알고 있습니다. 나는 적절한 소프트웨어 테스트를 통해 모험을 시작합니다.

이미 사용중인 포트는 분명하고 그 중 누구도 없으며 문제가 없습니다. 모든 테스트는 잘 작동합니다. 서버는 잘 작동하지만 stdout은 미쳤습니다. 이러한 행동은 이상적이며 잠재적 인 문제와 불안정성 문제가 가득합니다.

내 질문은 - 그것을 제거하는 방법

내 아이디어는 다음과 같습니다 :

  • 방금 다른 포트에서 테스트를 위해 전용 서버를 만듭니다. 불행히도 나는 이것을 구현하는 방법을 단서해야합니다.

  • 실행이 아닌 경우 서버를 실행하는 경우 superAgent를 조건으로 만들거나 그렇지 않으면 superAgent로 전달하십시오

  • 다른 것을 사용하면 superAgent를 사용하십시오 (같은 경우, 모든 쿠키와 node_tls_reject_unauthorized가 작동하지 않는지 확실하지 않습니다.

당신이 볼 수있는 것처럼 - 나는 그 주제와 어려움을 겪고 답변보다 더 많은 질문을하고, 어디에서 볼 지 알 수있는 경험이 충분하지 않다.

나는 친절하게 감사드립니다.

편집 :

나는 할 수 있다는 것을 발견했습니다 :

before(function(done) {
    app.listen(3001, function() { done(); });
});
.

다른 포트에서 테스트를 시작하지만 ... 전체 Server.js는 어쨌든로드되므로 어쨌든 시작됩니다. 그런 다음 실행중인 서버와 함께 실행할 때는 분명한 Eddrinuse가 있습니다.

도움이 되었습니까?

해결책

superagent를 사용할 때, 구성된 익스프레스 응용 프로그램 (미들웨어 등록, 컨트롤러가 라우트 등)을 전달해야하지만 HTTP 서버로 초기화되지는 않습니다. 그것은 당신을 위해 그것을 할 것이고 http.createServer 를 통해 사용 가능한 포트를 선택하여 < / P>

현재 server.js 모듈이 이미 전체 Blown HTTP 서버의 정적 인스턴스를 제공하고 있으면 문제의 원인이 가장 가능성이 높습니다. 두 경우 모두 실제 서버 인스턴스화에서 응용 프로그램 구성 / 부트 스트랩을 다음과 같이 추출하십시오.

// server.js
var express = require('express');
var middleware = require('./middleware');
var controllers = require('./controllers');

// Configures the Express application instance.
exports.setup = function (app) {
    app.use(middleware.foo);
    app.get('/bar', controllers.bar);

    app.locals.baz = 'quux';
}

// You might shoot yourself in the foot if parts of your application depend
// on a static reference at `server.app`.
exports.app = setup(express());
exports.app.listen(3000);
.

그런 다음 테스트에서 라인을 따라 무언가를 할 수 있습니다.

// tests.js
var express = require('express');
var server = require('./server');

describe('Server tests', function () {
    // Create a fresh server instance prior to each test
    beforeEach(function createNewSever() {
        this.app = server.setup(express());
    });

    describe('Foo', function () {
        it('barrs', function () {
            request(this.app)  // initializes a server instance on port A
            // ... supertests
        });

        it('bazzes', function () {
            request(this.app)  // initializes a server instance on port B
            // ... more supertests
        });
    });
});
.

이것은 응용 프로그램 인스턴스를 인스턴스화하는 방법이 테스트 컨텍스트에 따라 달라지는 WHEN / HOWERATION을위한 예시적인 목적을위한 것입니다. 중요한 것은 테스트 케이스에 대한 신선하고 깨끗하고 독립적이며 격리 된 서버 인스턴스를 만들 수 있어야한다는 것입니다. 병렬 또는 임의의 순서로 테스트를 실행하는 테스트 러너를 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top