2017-12-04 4 views
3

Ich schreibe asynchrone Tests mit AVA, und müssen benutzerdefinierte Timeout für jeden Testfall einrichten. Ich habe meine Tests herausgefunden, keine Informationen über diese Möglichkeit und scheint wie folgt aus:AVA: Setup verschiedene Timeout für jeden Testfall

import test from 'ava'; 
 

 
test.cb('super test', t => { 
 
    setTimeout(() => { 
 
     t.is(1, 1); 
 
     t.end(); 
 
    }, 10000); 
 

 
    setTimeout(() => { 
 
     t.fail("Timeout error!"); 
 
     t.end(); 
 
    }, 100); 
 
});

Weiß jemand einen anderen Weg, dies in AVA zu implementieren?

Antwort

2

Ich weiß nicht, ob AVA so etwas eingebaut hat. Ich vermute nicht, da es wie ein ganz ungewöhnlicher Anwendungsfall scheint.

Aber Sie könnten eine Nutzenfunktion erstellen, die eine Art von „Timeout-Test“ implementiert:

import test from 'ava'; 

function timeout (ms, fn) { 
    return function (t) { 
     setTimeout(() => { 
      t.fail("Timeout error!") 
      t.end() 
     }, ms) 
     fn(t) 
    } 
} 

test.cb('super test', timeout(10000, t => { 
    t.is(1, 1); 
})); 
+0

Vielen Dank, ich mochte Ihren Ansatz zur Lösung des Problems und jetzt benutze ich es in meinem Projekt - es erlaubt mir, die Anzahl der Codes zu reduzieren und lesbarer zu machen. –

1

Es ist eine offene Frage dies in AVA unterstützen selbst: https://github.com/avajs/ava/issues/1565

Bis dass Sie landet‘ Ich muss einen Timer selbst verwalten. Vergessen Sie nicht, es zu löschen, sobald Ihr normaler Test abgeschlossen ist.

+0

Danke, ich habe dieses Problem schon einmal gesehen, aber ich hatte gehofft, dass jemand weiß, wie man das macht, eine Workaround und/oder Erweiterungspunkte kennt, wie wir diese benutzerdefinierte Funktionalität hinzufügen können. –

Verwandte Themen