объединение тестов из нескольких файлов с мокко.js
Я пытаюсь объединить всех тестов из нескольких файлов в один файл, что-то вроде этого:
describe('Controllers', function() {
describe('messages.js', function() {
require('./controllertests/messages').test(options);
})
describe('users.js', function() {
require('./controllertests/users').test(options);
})
})
Я уверен, что это не лучший способ присоединиться к тестам, у меня возникли некоторые трудности с поиском примеров того, как это сделать :s
5 ответов:
если вы хотите включить несколько модулей на код
describeиерархия, как вы делаете в своем вопросе, то, что вы делаете, в значительной степени это, если вы не хотите написать пользовательский тестовый загрузчик для Мокко. Написание пользовательского загрузчика не будет проще или сделать ваш код яснее, чем то, что у вас уже есть.вот пример того, как я хотел бы изменить несколько вещей. Элемент
testподкаталог в этом примере организован как:. └── test ├── a │ └── a.js ├── b │ └── b.js ├── common.js └── top.js
top.js:function importTest(name, path) { describe(name, function () { require(path); }); } var common = require("./common"); describe("top", function () { beforeEach(function () { console.log("running something before each test"); }); importTest("a", './a/a'); importTest("b", './b/b'); after(function () { console.log("after all tests"); }); });The
importTestфункция просто показать, как можно было бы обрабатывать повторение импорта нескольких модулей без необходимости повторять весьdescribe(... require...каждый раз. Элементcommonмодуль предназначен для того, что вам нужно использовать в разных модулях набора тестов. Я на самом деле не использую его вtopно он может быть использован там, если это необходимо.отмечу здесь, что
beforeEachбудет работать его код перед каждым тестом, зарегистрированным вitпоявляются ли они внутриdescribeнаtopили они появляются в любой из модулей, импортированных. С--recursiveнаbeforeEachкод должен быть скопирован в каждый модуль или, возможно, у вас будетbeforeEachкрюк в каждом модуле, который вызывает функцию, импортированную из общего модуля.и
afterкрюк будет работать после все тесты в комплекте. Это не может быть реплицировано с--recursive. Если вы используете--recursiveи добавить кодafterдля каждого модуля он будет выполняться один раз для каждого модуля, а не только один раз для весь
хотя это не может быть напрямую связано с вопросом, ответ, который я искал, был:
$ mocha --recursiveвыполнит все тесты в подкаталогах папки "test". Аккуратный. Экономит необходимость поддерживать список тестов, которые я хочу загрузить и на самом деле просто всегда запускать все.
ничто не мешает вам запускать несколько тестовых файлов. Как правило, каждый тест не должен зависеть от результатов другого теста, поэтому совместное использование переменных-это не то, что вы хотели бы сделать.
вот пример того, как вы можете организовать свои тестовые файлы.
. ├── app.js └── test ├── common.js ├── mocha.opts │ ├── controllers │ ├── messages-controller.js │ └── users-controller.js │ └── modles ├── messages-model.js └── users-model.jsтогда внутри вашего
mocha.optsфайл, обязательно установите .мокко.ОПТС
--ui bdd --recursiveесли есть are общий модули, которые вы хотите включить во все файлы, вы можете добавить в . Файлы в корне
testкаталог будет работать перед файлами во вложенных каталогах.общие.js
global.chai = require('chai'); global.assert = chai.assert; global.expect = chai.expect; chai.should(); chai.config.includeStack = true; process.env.NODE_ENV = 'test'; // Include common modules from your application that will be used among multiple test suites. global.myModule = require('../app/myModule');
Я знаю, что это старый пост, но я хотел перезвонить с тем, что было хорошим решением для меня, очень похожим на метод, предложенный OP.
проект, над которым я работаю, хорошо протестирован, и тесты продолжают расти. Я в конечном итоге с помощью
requireпотому что это синхронно и поэтому делает его немного легче составить свои тесты без слишком больших изменений в архитектуре:// inside test/index.js describe('V1 ROUTES', () => { require('./controllers/claims.test'); require('./controllers/claimDocuments.test'); require('./controllers/claimPhotos.test'); require('./controllers/inspections.test'); require('./controllers/inspectionPhotos.test'); require('./controllers/versions.test'); require('./services/login.v1.test'); }); describe('V2 ROUTES', () => { require('./services/login.v2.test'); require('./services/dec-image.v2.test'); }); describe('V3 ROUTES', () => { require('./services/login.v3.test'); require('./services/getInspectionPhotosv3.test'); require('./services/getPolicyInfo.v3.test'); }); describe('ACTIONS', () => { require('./actions/notifications.test'); });
describe( 'Running automation test, Please wait for all test to complete!'.red, function () { var run = require( './Test.js' ); for ( var i = 0; i < 2; i++ ) { run.badLogin(); run.loginLimited(); run.acceptJob(); run.drivingToJob(); run.arrivedAtJob(); run.towingJob(); run.arrivedDestination(); run.jobComplete(); run.restrictionLicensePlate(); run.newNodeMainMenu(); run.newNodeMainMenuToDrafts(); run.draftDelete(); run.resetAllData(); run.companyVehicle(); run.actionsScreenClockInOut(); run.mainMenuLogout(); run.loginAdmin(); run.actionsScreenLogout(); } } );
Comments