2012-02-03 14 views
7

Zastanawiam się, czy istnieje sposób na wykonanie programów testowych mokka z pliku node.js, dzięki czemu mogę zintegrować testy jednostkowe z Cloud 9. Chmura 9 IDE ma dobra funkcja, gdy pliki javascript są zapisywane, szuka pliku o tej samej nazwie, kończącego się "_test" lub "Test" i uruchamia go automatycznie za pomocą node.js. Na przykład ma ten fragment kodu w pliku demo_test.js, który uruchamia się automatycznie.przy użyciu sprawdzania mocha z cloud9, wykonywanie testów mokka od node.js

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

Czy jest coś takiego, co mogę wykorzystać do przeprowadzenia testu mokki? Coś jak mocha (this) .run()?

Odpowiedz

12

Zasadniczych programowo uruchomić mokka:

Wymagaj mokka:

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

Instatiate wywołać konstruktor:

var mocha = new Mocha(); 

dodać pliki testowe:

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

Run to !:

mocha.run(); 

Dodawaj przykuty funkcje programowo zajmować przeszedł testy i zawiodły. W tym przypadku dodać wywołanie powrotem, aby wydrukować wyniki:

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

może się wahać, ale wymyślił następujące jedno-liner jakiś czas temu i służy mi całkiem dobrze:

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

Dodatkowo, jeśli chcesz, aby był wyprowadzany w formacie asyncjs, którego oczekuje Cloud9, musisz dostarczyć specjalny reporter. Oto bardzo prosty przykład tego, jak wyglądałby prosty reporter:

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); 
} 
Powiązane problemy