2012-02-03 31 views
7

Tôi đã tự hỏi liệu có cách nào để thực hiện các kiểm tra mocha theo lập trình từ node.js để tôi có thể tích hợp các thử nghiệm đơn vị với Cloud 9. Cloud 9 IDE có tính năng tuyệt vời ở bất cứ nơi nào một tệp javascript được lưu, nó sẽ tìm một tệp có cùng tên, kết thúc bằng "_test" hoặc "Test" và chạy nó tự động bằng cách sử dụng node.js. Ví dụ: đoạn mã này có trong tệp demo_test.js tự động chạy.sử dụng thử nghiệm mocha với cloud9, thực hiện kiểm tra mocha từ node.js

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

Có điều gì giống như tôi có thể sử dụng để chạy thử nghiệm mocha không? Một cái gì đó giống như một mocha (this) .run()?

Trả lời

12

Các yếu tố cần thiết để lập trình chạy mocha:

Yêu cầu mocha:

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

Instatiate gọi constructor:

var mocha = new Mocha(); 

Thêm file test:

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

Run nó !:

mocha.run(); 

Add xích chức năng để lập trình đối phó với trôi qua và thất bại trong bài kiểm tra. Trong trường hợp này thêm một cuộc gọi trở lại để in kết quả:

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

Mileage của bạn có thể thay đổi, nhưng tôi đã pha trộn loại sau một lót một khi trở lại và nó đã phục vụ tôi khá tốt:

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

Ngoài ra, nếu bạn muốn đầu ra ở định dạng asyncjs mà Cloud9 mong đợi, bạn sẽ cần phải cung cấp một trình báo cáo đặc biệt. Dưới đây là ví dụ thực sự đơn giản về những gì một phóng viên đơn giản sẽ trông giống như:

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); 
} 
Các vấn đề liên quan