Tôi ngạc nhiên bởi những gì bạn đã viết khi tôi sử dụng. Tôi sử dụng mocha với các bài kiểm tra kiểu bdd (mô tả/nó), và chỉ cần thêm một số console.logs để kiểm tra của tôi để xem nếu yêu cầu của bạn giữ với trường hợp của tôi, nhưng dường như họ không.
Đây là đoạn mã mà tôi đã sử dụng để xem thứ tự của "end1" và "start1". Chúng được đặt hàng đúng cách.
describe('Characters start a work', function(){
before(function(){
sinon.stub(statusapp, 'create_message');
});
after(function(){
statusapp.create_message.restore();
});
it('creates the events and sends out a message', function(done){
draftwork.start_job(function(err, work){
statusapp.create_message.callCount.should.equal(1);
draftwork.get('events').length.should.equal(
statusapp.module('jobs').Jobs.get(draftwork.get('job_id')).get('nbr_events')
);
console.log('end1');
done();
});
});
it('triggers work:start event', function(done){
console.log('start2');
statusapp.app.bind('work:start', function(work){
work.id.should.equal(draftwork.id);
statusapp.app.off('work:start');
done();
});
Tất nhiên, điều này có thể xảy ra do tai nạn, nhưng tôi có nhiều thử nghiệm và nếu chạy song song, tôi chắc chắn sẽ có điều kiện chủng tộc mà tôi không có.
Vui lòng tham khảo this issue quá từ trình theo dõi vấn đề mocha. Theo đó, các thử nghiệm được chạy đồng bộ.
'someCondition' sẽ thay đổi như thế nào nếu cuộc gọi trước bị khóa trong một vòng lặp while ?! Đây không phải là cách JavaScript hoạt động. – natevw
Câu trả lời cho câu hỏi của bạn nằm trong dòng chú thích 3: ".. điều kiện thiết lập kiểm tra Async của bạn sẽ xuất hiện tại đây". Cụ thể: Async, thiết lập các điều kiện, được đặt bên ngoài 'describe()' mà khởi tạo trước 'before()'. Xác nhận sau của bạn về Javascript không hoạt động theo cách này là sai. – papercowboy
Trong khi mã của bạn bị kẹt liên tục kiểm tra! SomeCondition lặp đi lặp lại, không có mã nào khác của bạn có thể chạy. (Tất cả các callback khác kết hợp với các sự kiện/bộ đếm thời gian sẽ bị ngăn cản thực hiện.) Cách duy nhất này sẽ hoạt động là nếu someCondition được đặt đúng trước khi vòng lặp bắt đầu - nếu không nó sẽ bị treo. Thử nó. – natevw