Ich habe Probleme beim Ausführen von asynchronen Funktionen in Mocha-Tests. Ich beginne den Knoten-Server in dem beforeEach-Aufruf und verkette einen Client-Socket, um eine Verbindung zu ihm herzustellen, bevor ich irgendwelche anderen it() -Anweisungen ausführe.Ausführen des Ereignisses synchron in Mokka
das Problem ist - ich bin immer abwechslungsreich Ausgänge mit jedem Mokka Anruf
dies ist mein Mokka Test
// Testen Ereignisse von Http
import chai,{expect} from 'chai';
import sinon from 'sinon'
import SocketCluster from 'socketcluster-client';
import testServer from '../../server/server.js';
import net from 'net';
import chaiAsPromised from 'chai-as-promised';
function startServer(port){
return new Promise(function(resolve,reject){
resolve(testServer(port))
})
}
chai.use(chaiAsPromised)
describe('httpServer',() => {
var client;
var options = {
port: 4000
}
beforeEach(() => {
startServer(4000).then(() => {
console.log('Server started')
client = SocketCluster.connect(options)
})
})
it('should return Anonymous user if client doesnt send a valid JWT token on user_connected event',() => {
return client.emit('user_connected',{id_token:false},(err,data) => {
expect(data).to.eventually.be.a('string');
})
})
})
ist dies die Ausgabe von dem erste Testanruf
httpServer
Test server started on 4000
Server started
user connected
1) "before each" hook for "should return Anonymous user if client doesnt send a valid JWT token on user_connected event"
Main page
✓ should show a sign-in page if isAuthenticated is false (60ms)
✓ should show a welcome text if isAuthenticated is true
SignUp login
✓ should return isAuthenticated=false on SIGNUP_REQUEST
✓ should return isAuthenticated=true on SIGNUP_SUCCESS
✓ should return isAuthenticated=false and errorMessage on SIGNUP_FAILURE
5 passing (2s)
1 failing
1) httpServer "before each" hook for "should return Anonymous user if client doesnt send a valid JWT token on user_connected event":
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
ist dies der zweite Anruf Ausgang
httpServer
1) should return Anonymous user if client doesnt send a valid JWT token on user_connected event
Test server started on 4000
Server started
Main page
✓ should show a sign-in page if isAuthenticated is false (82ms)
✓ should show a welcome text if isAuthenticated is true
user connected
SignUp login
✓ should return isAuthenticated=false on SIGNUP_REQUEST
✓ should return isAuthenticated=true on SIGNUP_SUCCESS
✓ should return isAuthenticated=false and errorMessage on SIGNUP_FAILURE
5 passing (347ms)
1 failing
1) httpServer should return Anonymous user if client doesnt send a valid JWT token on user_connected event:
TypeError: Cannot read property 'emit' of undefined
at Context.<anonymous> (server.test.js:34:14)
Wie Sie sehen können, passiert das Protokoll "Benutzer verbunden" sehr zufällig. Wie kontrolliere ich, dass es synchron passiert?
das funktioniert .. aber ich verstehe nicht warum ... gibt es etwas, was ich lesen kann, um meine Zweifel zu klären? – Kannaj
Mein letzter Absatz erklärt das Problem: "Die gleichen Regeln, die für asynchronen Code in Tests gelten, gelten für asynchronen Code in Hooks. Sie müssen eine Zusage zurückgeben oder den done Callback aufrufen." Nun, wenn Sie nicht wissen, wie Mocha mit asynchronen Tests umgeht, ist das ein Problem. [Diese Antwort] (http://stackoverflow.com/a/20760704/1906307) kann helfen. – Louis