Я удивлен тем, что вы написали, когда я использую. Я использую mocha с тестами стиля bdd (описать/это) и просто добавил некоторые тесты console.logs в свои тесты, чтобы проверить, соответствуют ли ваши претензии моим случаем, но, похоже, они этого не делают.
Вот фрагмент кода, который я использовал для просмотра порядка «end1» и «start1». Они были надлежащим образом заказаны.
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();
});
Конечно, это могло произойти случайно тоже, но у меня есть много тестов, и если они будут работать параллельно, я бы, безусловно, есть условия гонки, что у меня нет.
Обратите внимание также на this issue с отслеживания проблем мокко. В соответствии с этим тесты выполняются синхронно.
Как бы «someCondition» когда-либо изменилось, если перед обратным вызовом заблокирован в цикле while ?! Это не то, как работает JavaScript. – natevw
Ответ на ваш вопрос находится в строке комментариев 3: «... ваши условия настройки асинхронных тестов идут здесь». В частности: Async, условия настройки, ограниченные вне 'describe()', которые создаются перед 'before()'. Последнее утверждение о том, что Javascript не работает таким образом, неверно. – papercowboy
Пока ваш код застрял, повторно проверяя! SomeCondition снова и снова, ни один из ваших других кодов не может работать. (Все другие обратные вызовы, связанные с событиями/таймерами, будут предотвращены.) Единственный способ, с помощью которого это могло бы работать, - это когда someCondition устанавливается true до начала цикла, иначе он будет зависать. Попробуй. – natevw