tôi có một phần của mã được sử dụng node-sync như vậy:kiểm tra mã đồng bộ
function funcA() {
return new Promise(function(resolve, reject) {
Sync(function() {
return funcB.sync();
}, function (err, result) {
if(err) {
reject(err);
} else {
resolve(result);
}
});
}
Mã này được thử nghiệm sử dụng mocha + chai:
it("should return array", function() {
return funcA().then(function(result) {
expect(result).to.be.an.instanceof(Array);
});
});
Nó làm việc vài chỉ Phạt tiền months ago , nhưng bây giờ thử nghiệm này luôn luôn hết thời gian:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
Điều tôi đã thử cho đến thời điểm này:
- sử dụng
done()
thay vì trả lại một lời hứa - thay thế
node-sync
vớisynchronize.js
- tăng timeout
gì tôi phát hiện ra, được rằng expect(...
phần của thử nghiệm này là, trên thực tế, được gọi , nhưng chỉ sau khi mocha giết chết thử nghiệm. Bất kể khoảng thời gian chờ nào hiện được đặt, expect(..
luôn được gọi là ~ 20 mili giây sau khi tôi nhận được thông báo Error: timeout
.
Tôi đã khắc phục sự cố bằng cách thêm setInterval(function(){}, 10)
vào đầu tệp thử nghiệm. Tôi muốn biết tại sao điều này lại hiệu quả và nếu có cách nào tốt hơn để khắc phục điều đó?
[EDIT] Dường như đây là vấn đề cụ thể về phiên bản nút. Kiểm tra không thành công trên 0.12.4 nhưng chạy đúng 0.10.38.
[EDIT] Mã thực tế có sẵn here.
Dường như rất lạ .. tôi có thể tái sản xuất nhưng không thể tìm ra vấn đề là gì. có thể là một shot dài nhưng có thể đào vào nút đồng bộ, xem các vé github [ở đây] (https://github.com/ybogdanov/node-sync/issues/41) và [ở đây] (https: // github. com/ybogdanov/node-sync/issues/36) –
btw thường là cách thực hành tốt nhất (imho) để không chạy mã không đồng bộ trong một thử nghiệm. Tôi biết bạn đang cố gắng để chạy đồng bộ khối này, nhưng có thể thử mô-đun-như-hứa để bạn có thể loại bỏ 'done' –