Jestem zaskoczony tym, co napisałeś, kiedy używam. Używam mocha z testami w stylu bdd (opisz/it) i po prostu dodałem kilka testów console.logs do moich testów, aby sprawdzić, czy twoje roszczenia są w moim przypadku, ale na pozór nie.
Oto fragment kodu, którego użyłem, aby zobaczyć kolejność "end1" i "start1". Zostały właściwie zamówione.
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();
});
Oczywiście, to mogło się zdarzyć przez przypadek też, ale mam mnóstwo testów, a jeśli będą one działać równolegle, na pewno będę mieć warunki rasa, że nie mam.
Proszę również zapoznać się z this issue z trackera problemów mokki. Zgodnie z nim testy są przeprowadzane synchronicznie.
W jaki sposób "someCondition' kiedykolwiek się zmienił, jeśli wcześniej callback jest zablokowany w pętli while ?! Tak nie działa JavaScript. – natevw
Odpowiedź na twoje pytanie znajduje się w wierszu komentarza 3: "twoje ustawienia testów Async idą tutaj". Konkretnie: Asynchronizacja, warunki ustawień, z zakresu poza 'opisem()', które tworzą instancję przed 'before()'. Twoje ostatnie stwierdzenie o tym, że JavaScript nie działa w ten sposób, jest fałszywe. – papercowboy
Podczas gdy twój kod utknął wielokrotnie sprawdzając! Kilka warunkow wielokrotnie, żaden inny twój kod nie może działać. (Wszystkie inne wywołania zwrotne związane ze zdarzeniami/zegarami będą uniemożliwione). Jedyny sposób, w jaki to zadziała, to sytuacja, w której jakiś parametr jest ustawiony na true przed rozpoczęciem pętli - w przeciwnym razie zawiesi się. Spróbuj. – natevw