используя mocha-тестирование с cloud9, выполните mocha-тесты из node.js - PullRequest
7 голосов
/ 03 февраля 2012

Мне было интересно, есть ли способ выполнить тесты mocha программно из node.js, чтобы я мог интегрировать модульные тесты с Cloud 9. В облачной среде 9 есть отличная функция, где всякий раз, когда сохраняются файлы javascript, он ищетфайл с тем же именем, оканчивающийся на «_test» или «Test» и запускающий его автоматически с помощью node.js.Например, он содержит этот фрагмент кода в файле demo_test.js, который автоматически запускается.

if (typeof module !== "undefined" && module === require.main) {
    require("asyncjs").test.testcase(module.exports).exec()
}

Есть ли что-то подобное, что я мог бы использовать для запуска теста мокко?Что-то вроде мокко (этого) .run ()?

Ответы [ 2 ]

12 голосов
/ 14 апреля 2012

Необходимые для программного запуска mocha:

Требуется mocha:

var Mocha = require('./'); //The root mocha path (wherever you git cloned 
                               //or if you used npm in node_modules/mocha)

Неустанный вызов конструктора:

var mocha = new Mocha();

Добавление тестовых файлов:

mocha.addFile('test/exampleTest');  // direct mocha to exampleTest.js

Запустите его!:

mocha.run();

Добавьте связанные функции для программной обработки пройденных и неудачных тестов.В этом случае добавьте обратный вызов, чтобы распечатать результаты:

var Mocha = require('./'); //The root mocha path 

var mocha = new Mocha();

var passed = [];
var failed = [];

mocha.addFile('test/exampleTest'); // direct mocha to exampleTest.js

mocha.run(function(){

    console.log(passed.length + ' Tests Passed');
    passed.forEach(function(testName){
        console.log('Passed:', testName);
    });

    console.log("\n"+failed.length + ' Tests Failed');
    failed.forEach(function(testName){
        console.log('Failed:', testName);
    });

}).on('fail', function(test){
    failed.push(test.title);
}).on('pass', function(test){
    passed.push(test.title);
});
1 голос
/ 14 ноября 2012

Ваш пробег может отличаться, но я некоторое время назад придумал следующую однострочную строку, и она мне очень хорошо послужила:

if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);

Дополнительно, если вы хотите, чтобы она выводилась в формате asyncjsчто ожидает Cloud9, вам нужно будет предоставить специальный репортер.Вот действительно простой пример того, как будет выглядеть простой репортер:

if (!module.parent){
    (new(require("mocha"))()).ui("exports").reporter(function(r){
        var i = 1, n = r.grepTotal(r.suite);
        r.on("fail", function(t){ console.log("\x1b[31m[%d/%d] %s FAIL\x1b[0m", i++, n, t.fullTitle()); });
        r.on("pass", function(t){ console.log("\x1b[32m[%d/%d] %s OK\x1b[0m", i++, n, t.fullTitle()); });
        r.on("pending", function(t){ console.log("\x1b[33m[%d/%d] %s SKIP\x1b[0m", i++, n, t.fullTitle()); });
    }).addFile(__filename).run(process.exit);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...