Как заставить узел узла обнаруживать и запускать тесты, включенные в подпапки? - PullRequest
2 голосов
/ 09 февраля 2012

У меня есть следующая структура папок для моих тестов узлов узла для конкретного проекта:

/tests
/tests/basic-test.js
/tests/models/
/tests/models/model1-tests.js
/tests/models/model2-tests.js

У меня вопрос: как заставить узел узла автоматически выполнять ВСЕ тесты в папке tests , включая подкаталоги, содержащиеся в?

Если я выполняю тесты узла узла , он выполняет только basic-test.js и по умолчанию пропускает все в подпапках.

Ответы [ 4 ]

4 голосов
/ 09 февраля 2012

Используйте make магию на основе (или магию на основе раковины).

test: 
    nodeunit $(shell find ./tests -name \*.js)

Здесь вы передаете результат выполнения find ./tests -name \*.js в nodeunit, который должен рекурсивно запускать все тесты javascript

1 голос
/ 30 марта 2014

Nodeunit позволяет вам передать список каталогов, из которых можно запускать тесты. Я использовал пакет под названием diveSync, который синхронно и рекурсивно зацикливает файлы и каталоги Я храню все каталоги в массиве и передаю его узлу узла:

var diveSync = require("diveSync"),
    fs = require("fs"),
    nodeUnit = require('nodeunit'),
    directoriesToTest = ['test'];

diveSync(directoriesToTest[0], {directories:true}, function(err, file) {
    if (fs.lstatSync(file).isDirectory()) {
        directoriesToTest.push(file);
    }
})

nodeUnit.reporters.default.run(directoriesToTest);
0 голосов
/ 17 июня 2017

Я искал решения по тому же вопросу.Ни один из представленных ответов полностью не подходит для моей ситуации, когда:

  • Я не хотел иметь никаких дополнительных зависимостей.
  • У меня уже был установлен глобальный узел узла.
  • Я не хотел вести тестовый файл.

Итак, окончательное решение для меня - объединить идеи Яна и mbmcavoy:

// nodeunit tests.js
const path = require('path');
const fs = require('fs');

// Add folders you don't want to process here.
const ignores = [path.basename(__filename), 'node_modules', '.git'];
const testPaths = [];

// Reads a dir, finding all the tests inside it.
const readDir = (path) => {
    fs.readdirSync(path).forEach((item) => {
        const thisPath = `${path}/${item}`;
        if (
            ignores.indexOf(item) === -1 &&
            fs.lstatSync(thisPath).isDirectory()
        ) {
            if (item === 'tests') {
                // Tests dir found.
                fs.readdirSync(thisPath).forEach((test) => {
                    testPaths.push(`${thisPath}/${test}`);
                });
            } else {
                // Sub dir found.
                readDir(thisPath);
            }
        }
    });
}

readDir('.', true);
// Feed the tests to nodeunit.
testPaths.forEach((path) => {
    exports[path] = require(path);
});

Теперь я могу запустить все свои тестыНовый и старый, с помощью простой команды nodeunit tests.js.

Как видно из кода, тестовые файлы должны находиться внутри папок tests, а в папках не должно быть никаких других файлов.

0 голосов
/ 03 октября 2013

Хотя это не автоматическое решение, как описано выше, я создал файл коллектора, подобный этому:

allTests.js:

exports.registryTests = require("./registryTests.js");
exports.message = require("./messageTests.js")

Когда я запускаю nodeunit allTests.js, он запускает все тесты, а также указывает иерархическое расположение:

? registryTests - [Test 1]
? registryTests - [Test 2]
? messageTests - [Test 1]

и т.д ...

Хотя создание нового файла модульного теста потребует включения его в сборщик, это простая одноразовая задача, и я все еще могу запускать каждый файл по отдельности. Для очень большого проекта это также позволило бы сборщикам, выполняющим более одного, но не все тесты.

...