Ich schreibe gerade eine Spielengine in nodejs.Nodejs Testing. Wie vermeide ich Race Conditions?
Mein Spiel hat mehrere Zustände. Nennen wir sie StateA, StateB, StateC. Der Ablauf der Sequenz ist StateA => StateB => StateC.
Ich möchte den Zustand meines Motors am Ende jedes Staates testen. Im Moment habe ich diese Struktur:
function attachEventListeners = function(instance) {
instance.on('START_STATE_A', stateA);
instance.on('START_STATE_B', stateB);
instance.on('START_STATE_C', stateC);
}
var stateACallBack = function() {};
var stateBCallBack = function() {};
var stateCCallBack = function() {};
function stateA() {
// Do something...
stateACallBack();
setTimeout(function() { this.emit('START_STATE_B'); }, 3000)
}
function stateB() {
// Do something...
stateBCallBack();
setTimeout(function() { this.emit('START_STATE_C'); }, 3000)
}
function stateC() {
// Do something...
stateCCallBack();
setTimeout(function() { this.emit('START_STATE_A'); }, 3000)
}
Also mein aktueller Ansatz beinhaltet meine Testfälle außer Kraft setzen stateXCallback mit und die Test-Logik in diesen Funktionen ausführen.
Allerdings sehe ich eine Wettlaufsituation, in der stateB gefeuert wird vor stateACallBack hat die Ausführung beendet. Daher sieht stateACallback Zustände, die stattdessen von stateBCallback ausgewertet werden sollten.
Ich habe versucht, eine Verzögerungszeit zwischen den Zuständen zu injizieren, dies führt jedoch zusätzliche Fehler in meiner Codebasis ein.
Kann mir bitte jemand einen besseren Ansatz für dieses Problem aufklären?