Тестирование интеграции поддоменов с Nodejs и Supertest - PullRequest
0 голосов
/ 31 декабря 2018

Как написать интеграционные тесты для мультитенантного приложения с поддоменом.

Я работаю над мультитенантным приложением.Я пытаюсь написать интеграционные тесты для субдомена, но не могу заставить его работать.

Вот что я сделал:

тестовый файл

import supertest from 'supertest';
import http from 'http';
import app from '../../../app';

const baseUrl = 'censio.lvh.me:7000';

describe('Censio tests', () => {
  let server;
  let request;

  beforeAll((done) => {
    server = http.createServer(app);
    server.listen(7000, done);
    request = supertest(server);
  });

  afterAll((done) => {
    server.close(done);
  });

  describe('Signin', () => {
    it('should respond with missing fields ...', async () => {
      const response = await request
        .post(`${baseUrl}/signin`)
        .send({})
        .set('Accept', 'application/json');

      expect(response.status).toBe(400);
    });
  });
});

app.js

import '@babel/polyfill';
import bodyParser from 'body-parser';
import cookieParser from 'cookie-parser';
import express from 'express';
import subdomain from 'express-subdomain';
import censioRouter from './tenants/censio';

const app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cookieParser());

// Subdomain definitions
app.use(subdomain('censio', censioRouter));

app.get('*', (req, res) => res.status(200).json({ message: 'Project started' }));

export default app;

Когда я проверяю response.text, я вижу <!DOCTYPE html> <html lang=\"en\"> <head> <meta charset=\"utf-8\"> <title>Error</title> </head> <body> <pre>Cannot POST /:7000censio.lvh.me/signin</pre> </body> </html>

Это ставит сообщение впереди.Когда я избавляюсь от порта, я получаю эту ошибку: connect ECONNREFUSED 127.0.0.1:80

Что мне делать?

1 Ответ

0 голосов
/ 01 января 2019

Я наконец получил его на работу.Я публикую это для тех, кому может понадобиться это решение в будущем.

  • Во-первых, я получил полное понимание того, как использовать собственный домен для локального тестирования моего приложения.Мне пришлось изменить мой /etc/hosts файл. Этот пост помог мне в этом.

  • Я изменил свои тесты (как видно из моего вопроса выше).Вместо передачи app в супер-тест, я передал базовый URL-адрес, который я хотел, т.е. мой URL-адрес, содержащий мой поддомен (censio.mydomain.com:myport).Вот как это выглядит сейчас.

    import supertest from 'supertest';
    import http from 'http';
    import app from '../../../app';
    
    describe('Censio tests', () => {
      describe('Signin', () => {
        let server;
        let request;
    
        beforeAll((done) => {
          server = http.createServer(app);
          server.listen(7000, done);
          request = supertest('http://censio.mydomain.com:7000');
        });
    
        afterAll((done) => {
          server.close(done);
        });
    
        it('should respond with missing fields ...', async () => {
          const response = await request
            .post('/signin')
            .send({})
            .set('Accept', 'application/json');
    
          expect(response.status).toBe(400);
        });
      });
     });
    

Обратите внимание, что я изменил, куда я звоню, до и после хуков.

Надеюсь, это поможет вам, так как это помоглоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...