2014-03-31 7 views
9

Ich habe versucht, meinen Testserver mit Mocha zu testen. Dies ist der folgende Code, den ich benutze, fast der gleiche wie in einem anderen ähnlichen Post.Mocha beforeEach und afterEach während des Tests

beforeEach(function(done) { 
    // Setup 
    console.log('test before function'); 
    ws.on('open', function() { 
     console.log('worked...'); 
     done(); 
    }); 
    ws.on('close', function() { 
     console.log('disconnected...'); 
    }); 
}); 

afterEach(function(done) { 
    // Cleanup 
    if(readyState) { 
     console.log('disconnecting...'); 
     ws.close(); 
    } else { 
     // There will not be a connection unless you have done() in beforeEach, socket.on('connect'...) 
     console.log('no connection to break...'); 
    } 
    done(); 
}); 

describe('WebSocket test', function() { 
    //assert.equal(response.result, null, 'Successful Authentification'); 
}); 

das Problem ist, dass, wenn ich diesen Entwurf ausführen, keine der console.log, die auf Eingabeaufforderung sichtbar ist, zu sehen erwartet. Kannst du mir bitte erklären was mache ich falsch?

Antwort

7

Sie haben in Ihrem Beispiel keine Tests. Wenn keine Tests ausgeführt werden, werden die Vorher- und Nachher-Hooks nicht aufgerufen. Versuchen Sie, einen Test wie:

describe('WebSocket test', function() { 
    it('should run test and invoke hooks', function(done) { 
     assert.equal(1,1); 
     done(); 
    }); 
}); 
16

Georgi richtig ist, dass Sie einen it Anruf benötigen einen Test zu geben, aber Sie brauchen nicht ein Top-Level describe in der Datei haben, wenn Sie nicht wollen. Sie könnten Ihre Einzel describe mit einem Bündel von it Anrufe ersetzen:

it("first", function() { 
    // Whatever test. 
}); 

it("second", function() { 
    // Whatever other test. 
}); 

Das funktioniert sehr gut, wenn Ihre Testsuite nur eine Datei klein und besteht aus ist.

Wenn Ihre Testsuite ist größer oder auf mehrere Dateien verteilt, würde ich sehr stark schlage vor, Sie setzen Ihre beforeEach und afterEach zusammen mit Ihrem it innerhalb des describe, wenn Sie absolut sicher sind, dass jeder einzelne Test in der Suite Bedürfnisse die Arbeit von beforeEach oder afterEach getan. (Ich habe mehrere Testsuiten mit Mocha geschrieben, und ich habe noch nie ein beforeEach oder afterEach, die ich brauchte für jeden einzelnen Test auszuführen.) So etwas wie:

describe('WebSocket test', function() { 
    beforeEach(function(done) { 
     // ... 
    }); 

    afterEach(function(done) { 
     // ... 
    }); 

    it('response should be null', function() { 
     assert.equal(response.result, null, 'Successful Authentification'); 
    }); 
}); 

Wenn Sie nicht Ihre setzen beforeEach und afterEach innerhalb describe wie dieser, dann sagen wir mal, Sie haben eine Datei zum Testen von Web-Sockets und eine andere Datei, um einige Datenbankoperationen zu testen. Die Tests in der Datei, die die Datenbankoperationstests enthält, werden und Ihre beforeEach und afterEach vor und nach ihnen ausgeführt. Setzen Sie die beforeEach und afterEach innerhalb der describe wie oben gezeigt wird sicherstellen, dass sie nur für Ihre Web-Socket-Tests durchgeführt werden.

Verwandte Themen