Wie stelle ich das Timeout für den Trüffeltest vor dem Blockieren ein?

Ich führe meine Tests auf einer privaten Kette durch und einige von ihnen laufen ab:

  1)  "before all" hook:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

Ich habe versucht, das Timeout für den gesamten Test oder für den Vorher-Teil gemäß der Mocha-Dokumentation festzulegen:

contract("looong tests", accounts => {
   this.timeout();

oder

before( done => {
   this.timeout(40000);

Ich habe diesen Fehler:

  1)  "before all" hook:
     TypeError: _this.timeout is not a function

Das Hinzufügen des Befehlszeilenparameters -t scheint keine Wirkung zu haben:

truffle test myTest.js -t 40000
truffle test myTest.js --timeout 40000

Ich sehe einen alten ausstehenden Fix in Truffle: https://github.com/trufflesuite/truffle/issues/261

Wie kann ich das Timeout für die Before-Anweisung erhöhen?

Das Hinzufügen von Timeouts zu einzelnen Testfällen funktioniert, aber nicht für die Before-Anweisung :(

   it('one long test', () => {
        ....
    }).timeout(40000 ); 

BEARBEITEN: Ich habe vorerst eine Problemumgehung und habe den Code von vorher in den ersten Test verschoben, den ich synchronisiert habe:

   it('should go to before block but can't set timeout there', done =>  {
        new Promise( async function (resolve, reject) {
          // my before code 
          resolve();
        }).then( res => {
         done();
        });
    }).timeout(40000 ); 

Antworten (4)

Fügen Sie dies in Ihrer Truffle-Konfigurationsdatei hinzu ( truffle.jsoder truffle-config.js):

mocha: {
    enableTimeouts: false,
    before_timeout: 120000 // Here is 2min but can be whatever timeout is suitable for you.
}

Wenn Sie Zeitüberschreitungen beibehalten (und sogar unterschiedliche Zeitüberschreitungen für verschiedene Tests konfigurieren möchten), folgen Sie einfach den Anweisungen hier .

Es ist mir nicht gelungen, dies zum Laufen zu bringen, es verwendet immer das Standard-Timeout von 120 Sekunden. Funktioniert es mit der neuesten Truffle-Version?
@NicolasMassart: Sie stimmen meine Antwort ab und erwarten dann, dass ich Ihnen helfe??? Diese Antwort ist seit mehr als einem Jahr hier und niemand hat sich beschwert (und 4 haben dafür gestimmt)! Ist Ihnen schon einmal in den Sinn gekommen, dass Ihr Problem vielleicht eine andere Ursache hat?
Wow, beruhige dich. Ich habe Sie nicht abgelehnt, ich habe Ihre Antwort abgelehnt. Tatsache ist, dass Ihre Antwort mein Problem nicht gelöst hat und keine Wirkung zu haben scheint. Wenn Sie mir also zeigen können, dass ich falsch liege, kann ich mich damit befassen, die Ablehnung zu entfernen und dieser Antwort mehr Sichtbarkeit zu verleihen. Und bitte verzeihen Sie mir, wenn Sie darüber verärgert waren, ich dachte nicht, dass es so wichtig für Sie ist, positiv bewertet zu werden.
@NicolasMassart: Zunächst einmal kann ich Ihnen nicht zeigen, dass Sie falsch liegen, weil Sie nicht der ursprüngliche Verfasser der Frage sind, und daher habe ich absolut keine Ahnung, wie Sie aussehen, wie Ihre Tests aussehen, wie Ihr Trüffel aussieht setup ist, was Ihre Truffle-Version ist und so weiter. Beispielsweise könnten Sie das mochaan der falschen Stelle in Ihrer Truffle-Konfigurationsdatei platziert haben. Oder Sie könnten möglicherweise zwei Konfigurationsdateien haben - truffle.jsoder truffle-config.js- Truffle wäre standardmäßig für erstere, aber Sie haben mochaletztere hinzugefügt.
Und es gibt natürlich viele andere Szenarien, die ich unmöglich sagen kann, ohne Ihr Setup zu sehen. Zweitens ärgert es mich in der Tat, dass Sie einen Kommentar posten und dann sofort eine Antwort ablehnen, die anscheinend schon eine ganze Weile da ist und einigen Leuten geholfen hat, von denen sich keiner beschwert hat! Also ja, ich würde es mir zweimal überlegen, bevor ich diesen Weg einschlage. Ich würde alle möglichen Optionen abwägen und dann anfangen zu denken " was habe ich falsch gemacht " anstatt "was ist falsch an einer Antwort, die seit geraumer Zeit von der Community verwendet wird"!!!
Gegeben github.com/trufflesuite/truffle/pull/2008 , wenn Sie before_timeout: 20000000 neben enableTimeouts: false hinzufügen, funktioniert es. Erlauben Sie mir, Ihre Antwort zu bearbeiten?
@NicolasMassart: Ja.
Ist die Bearbeitung für dich ok?
Ich habe hochgestimmt, da es jetzt für mich funktioniert. Vielleicht könnte dies die akzeptierte Antwort sein?
@NicolasMassart: Ich glaube, dass das before_timeoutmöglicherweise in einer neueren Version von Mocha hinzugefügt wurde, die von einer neueren Version von Truffle verwendet wird, die Sie möglicherweise verwenden (5.x?). Zum Zeitpunkt des Schreibens dieser Antwort war die Truffle-Version 4.x.
Großartig, es dann aktualisiert zu haben, damit es immer noch eine gültige Antwort ist.

Als Ergänzung zur Antwort von goodvibration: Es spielt eine Rolle, wo Sie dieses Code-Snippet in einfügen truffle.js. Für mich funktionierte es nur innerhalb von module.exportsauf höchster Ebene (nicht innerhalb anderer Dinge wie networks).

Hier ist, was für mich funktioniert hat:

module.exports = {
  mocha: {
    enableTimeouts: false
  }
};

Die Optionen für Mokka scheinen sich häufiger als erwartet zu ändern.

Ab Truffle v5.1.9 ist der verwendete Mocha v5.2.0, und die Optionen für die MochaKlasse finden Sie im Quellcode hier: https://github.com/mochajs/mocha/blob/v5.2.0/lib /mocha.js#L83

Es gibt Optionen wie die folgenden

  • enableTimeouts- boolean, Timeouts aktivieren?
  • timeout- Zahl|String, Test-Timeout-Grenzwert angeben (in Millisekunden)
  • bail- boolean, Bail nach erstem Testfehler?
  • retries- Zahl, Wiederholen Sie fehlgeschlagene Tests so oft

Eine spätere Version des Trüffels kann eine höhere Version von Mocha verwenden. Dann sollten Sie besser die Änderung der Optionen in der obigen GitHub-Quelle überprüfen, indem Sie die Tags ändern.

Sie können nicht thisüber eine () => {}Stilfunktion darauf zugreifen. this.timeout()Wenn Sie den Before-Block verwenden möchten, müssen Sie a tun

before(function() {
   ...
});