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 );
Fügen Sie dies in Ihrer Truffle-Konfigurationsdatei hinzu ( truffle.js
oder 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 .
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.exports
auf 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 Mocha
Klasse 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 oftEine 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() {
...
});
Nicolas Massart
gute Stimmung
Nicolas Massart
gute Stimmung
mocha
an der falschen Stelle in Ihrer Truffle-Konfigurationsdatei platziert haben. Oder Sie könnten möglicherweise zwei Konfigurationsdateien haben -truffle.js
odertruffle-config.js
- Truffle wäre standardmäßig für erstere, aber Sie habenmocha
letztere hinzugefügt.gute Stimmung
Nicolas Massart
gute Stimmung
Nicolas Massart
Nicolas Massart
gute Stimmung
before_timeout
mö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.Nicolas Massart