Should tearDown be queued on process.nextTick?
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 25/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- javascript
- Bereich
- testing
Rechercherichtung
Reproduziere das Problem mit den im Bericht gezeigten async.auto- und async.parallel-Fixtures und untersuche anschließend nodeunit/lib/core.js im Bereich von wrapTest und dessen Behandlung von teardown. Überprüfe die Reihenfolge von tearDown relativ zu asynchronen Callbacks und bestätige, dass die abgeschlossenen Tests nicht mehr auf bereinigten Zustand zugreifen, bevor tearDown abgeschlossen ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
I've encountered an issue that's reproducible with async.parallel/auto and nodeunit.
var async = require('async');
var str;
exports.setUp = function(cb){
console.log('setup');
str = "This is a test";
cb();
}
exports.tearDown = function(cb){
//process.nextTick(function(){
console.log('teardown');
str = undefined;
cb();
//});
}
exports["testA"] = function(test){
async.auto({
test1:function(cb, results){
console.log('test1');
cb(new Error("test"));
},
test2:function(cb, results){
console.log('test2');
console.log(str, str.length);
cb();
}
}, function(err, results){
if(err) console.error(err);
test.done();
});
}
exports["testB"] = function(test){
async.parallel({
test1:function(cb, results){
console.log('test1');
cb(new Error("test"));
},
test2:function(cb, results){
console.log('test2');
console.log(str, str.length);
cb();
}
}, function(err, results){
if(err) console.error(err);
test.done();
});
}
This produces the output:
setup
test1
[Error: test]
teardown
test2
teardown
✖ testATypeError: Cannot read property 'length' of undefined
at Array.exports.testA.async.auto.test2 as 0
at async.auto (/Users/davefenster/node_modules/async/lib/async.js:406:38)
at Array.forEach (native)
at _forEach (/Users/davefenster/node_modules/async/lib/async.js:26:24)
at Object.async.auto (/Users/davefenster/node_modules/async/lib/async.js:382:9)
at Object.exports.testA (/Users/davefenster/temp/testnodeunitbug/test.js:19:8)
at wrapTest (/Users/davefenster/node_modules/nodeunit/lib/core.js:231:20)
at _asyncMap (/Users/davefenster/node_modules/nodeunit/deps/async.js:163:13)
at async.forEachSeries.iterate (/Users/davefenster/node_modules/nodeunit/deps/async.js:126:25)
at _asyncMap (/Users/davefenster/node_modules/nodeunit/deps/async.js:160:17)setup
test1
[Error: test]
teardown
test2
teardown
✖ testATypeError: Cannot read property 'length' of undefined
at Array.exports.testA.async.auto.test2 as 0
at async.auto (/Users/davefenster/node_modules/async/lib/async.js:406:38)
at Array.forEach (native)
at _forEach (/Users/davefenster/node_modules/async/lib/async.js:26:24)
at Object.async.auto (/Users/davefenster/node_modules/async/lib/async.js:382:9)
at Object.exports.testA (/Users/davefenster/temp/testnodeunitbug/test.js:19:8)
at wrapTest (/Users/davefenster/node_modules/nodeunit/lib/core.js:231:20)
at _asyncMap (/Users/davefenster/node_modules/nodeunit/deps/async.js:163:13)
at async.forEachSeries.iterate (/Users/davefenster/node_modules/nodeunit/deps/async.js:126:25)
at _asyncMap (/Users/davefenster/node_modules/nodeunit/deps/async.js:160:17)FAILURES: 2/2 assertions failed (12ms)
FAILURES: Undone tests (or their setups/teardowns):
- testB
To fix this, make sure all tests call test.done()
The error manifests itself because tearDown runs before all the async.auto and async.parallel functions have executed. Ideally, what I'd want is the tearDown to run only after async.auto/parallel are complete.
To make the tests pass, uncomment the process.nextTick line in the tearDown function.
Should nodeunit be putting tearDown on the nextTick queue all the time?
- Vorherrschende Sprache
- JavaScript
- Sterne
- 1.9k
- Forks
- 359
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus caolan/nodeunit
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 42/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
Alle Issues in caolan/nodeunit
Ähnliche Issues
-
good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
Riloox/hostkind-open#45 ·
-
Request: semgrepOffennew icon permissions in review
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
simple-icons/simple-icons#15093 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 83/100
module-federation/core#5205 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
aikido security:critical
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 76/100
dequelabs/monitor-utility#63 ·