Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.03.2020, 18:17
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Тестирование приложения с асинхронной инициализацией
Здравствуйте. Есть желание написать тестов на свое приложение. Имеется главный файл приложения:
const express = require('express');
const sanitizer = require('express-sanitizer');
const config = require('./class/config');
const app = express();

const MSG = require('./class/message').getInstance('ru');
const LOG = require('./class/logger');
const sql = require('./class/appsql');
const apputil = require('./class/apputil');
const RouteRegistrator = require('./class/routeregistrator');

// Настраиваем обработку роутами JSON и фильтруем скрипты из запросов
app.use(express.json());
app.use(express.urlencoded({extended: true}));
// app.use(sanitizer());
app.use(apputil.setHeaders);

// Асинхронная инициализация приложения
(async () => {
	// Инициализируем приложение
	await initApp();
	// Запускаем сервер
	await initPort();
})();


async function initApp() {
	// Инициализируем SQL и читаем настройки приложения
	await sql.init();
	await sql.loadPreferences();
	// Регистрируем роуты
	const reg = new RouteRegistrator(app);
	reg.register();

	// Глобальный обработчик ошибок.
	apputil.initGlobalErrorHandler(app, LOG);
}


async function initPort() {
	const port = process.env.PORT || config.getKey('apiPort');
	const resInit = new Promise(resolve => {
		app.listen(port, (err, req, res) => {
			const msg = "Application started at port: " + port;
			LOG.logInfo(msg);
			resolve(msg);
		});
	});
	await resInit;
}

module.exports.app = app;


И файл для тестирования компонента:

process.env.NODE_ENV = 'test';
process.env.PORT = 3333;

const app = require('./../../../apia');
const chai = require('chai');
const chaiHttp = require('chai-http');
const expect = chai.expect;
chai.use(chaiHttp);


describe("Bullet description", (done) => {
	let moduleRoute = '/bullet',
		newId = -1

	const dataNormal = {
		name: "Test bullet description",
		code: "test Bullet description Code1"
	}

	it("Create bullet NORMAL", (done) => {
		chai.request(app)
			.post(moduleRoute)
			.send(dataNormal)
			.end((err, res) => {
				expect(err).to.be.null;
				expect(res).to.have.status(200);
				expect(res).to.be.a('object');
				expect(res.body).to.haveOwnProperty('id');
				if(res.body.id) newId = res.body.id;
				console.log("insert END = ", newId);
				done();
			});
	});

});


Как и следовало ожидать, тестирование начинается до того, как приложение проинициализируется.
Не подскажете каким способом разруливают какую проблему?
Если использовать before, то мой вариант не подходит. Модуль уже начал инициализироваться и. По идее, тогда надо не надо подключать приложение, а в каждем модуле проводить асинхронную инициализацию компонентов приложения? 100 модулей = 100 инициализаций, 100 коннектов к БД?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка, хранение, сборка, тестирование нескольких проектов из одного окружения XAPuTOH ExtJS 2 24.07.2018 06:04
События контроллера приложения khusamov ExtJS 4 02.05.2016 20:51
2 Ext приложения в одном :) XAPuTOH ExtJS 2 01.02.2016 07:40
тестирование и онлайн редактор jkz Общие вопросы Javascript 1 31.03.2013 12:05
верстальщик для приложения вконтакте tadjik1 Работа 3 23.06.2012 15:34