2016-06-20 11 views
0

ich in meiner app mehrere Integrationstests haben:Richtig Mokka getan Rückruf anrufen und verspricht

it('creating vehicle', function (done) { 
    createVehicle()   
     .then(() => { 
     done(); 
     }) 
     .catch((err) => { 
     done(err); 
     }); 
    }); 

createVehicle macht Post-Anforderung und Renditen versprechen:

return request.json('post', '/api/vehicle/') 
    .send(obj) 
    .expect(200) 
    .then((res) => { 
     expect(res.body).toExist("Body is empty"); 
     expect(res.body.id).toExist("Id is empty");  
     return res.body; 
    }); 

Jetzt alles funktioniert gut, aber wenn ich neu schreiben erster Schnipsel in folgenden Weise:

it('creating vehicle', function (done) { 
     createVehicle()   
      .then(done) //* 
      .catch(done); //* 
     }); 

ich bekomme Fehler von Mocha

done() aufgerufen mit nicht-Fehler

Ich verstehe, warum. Die createVehicle zurückgeben res.body und es ist an then Rückruf, im Ergebnis done ausgeführt als done(arg) übergeben und ich bekomme den Fehler, weil Mocha done Rückruf ohne arg aufgerufen werden muss, wenn kein Fehler und mit Argument, wenn es einen Fehler gibt.

Ist es möglich, diese Variante zu verwenden:

.then(done) 
.catch(done); 

Wie dies zu erreichen?

Natürlich kann ich return-Anweisung, löschen, aber createVehicle wird an mehreren Stellen verwendet und ich brauche Rückgabewert:

it('creating vehicle with media', function (done) { 
    createVehicle() 
     .then(createMedia) //createMedia will get returned value  
     //.... 
    }); 

Antwort

1

Die einfachste Lösung wäre, nur das Versprechen, zurückzukehren, anstatt mit Rückrufe zu tun zu haben , weil Mokka supports promises out-of-the-box:

it('creating vehicle', function() { 
    return createVehicle(); 
}); 
+0

Wow, danke, habe ich dies übersprungen. – user348173