2017-11-10 4 views
0

Aus irgendeinem Grunde der erste Einheit Test meines Testanzugs ist immer langsamer als die andere. Wenn die Tests in meiner Konsole ausführen bekomme ich so etwas wie:Mocha Erster Unit-Test immer langsamer als die anderen

√ unit test A (483ms) 
√ unit test B 

Aber in dem Code, wenn ich das Gerät zu testen B ändern, um über dem Unit-Test A, bekomme ich diese:

√ unit test B (470ms) 
√ unit test A 

Für einige Grund ist, dass die ersten Unit-Tests immer langsamer werden und deswegen denke ich, der Grund dafür ist, dass ich nicht in meinem Code, sondern in Mocha langsam bin. Zur gleichen Zeit habe ich andere Testanzüge, die anderen Code testen und es funktioniert gut, so dass ich verwirrt bin. Vielleicht ist das nicht Mocha, aber weil ich nicht sicher bin, muss ich fragen, ob Sie eine Vorstellung davon haben, was passieren kann.

Der Test ist so etwas wie diese:

let target = require('...'); 

describe('Module of unit tests', function() { 
    this.timeout(1000); 
    before(function() { 
     ... 
    target = proxyquire('...', { 
     'node-chartist': sinon.stub().resolves('...'), 
     'ws': function(){ 
     return { 
      'close': function(){ /*Do nothing*/ }, 
      'send': function(){ /*Do nothing*/ }, 
      'on': function(arg, callback){ 
      ... 
      } 
     }; 
     } 
    }); 
    }); 

    //Warning happens here 
    it('unit test A', function() { 
    ... 
    target(); 
    ... 
    }); 

    //If this unit test goes above unit test A, this will be the one to get 
    the warning. 
    it('unit test B', function() { 
    ... 
    target(); 
    ... 
    }); 
}) 

`

ich in anderen Projekten ohne Erfolg zu reproduzieren versucht, so bezweifle ich, Sie in der Lage sein werden, es zu tun, aber was ich tue Führen Sie die Tests mit dem obigen Unit-Test A aus und führen Sie dann die Tests mit dem Unit-Test B oben aus.

Versionen:

node v6.11.4 
npm 3.10.10 
mocha 4.0.1 
sinon 4.1.2 
chai 3.5.0 
proxyquire 1.8.0 

I Fiedler verwendet, um sicherzustellen, dass, während der Unit-Tests ausführen, keine Netzwerkanforderung für außen gemacht wurde, um sicherzustellen, dass die Verzögerung nicht durch eine Netzwerkanforderung verursacht wird.

Ich habe auch den Code getestet, den der Komponententest testet, und ich sehe wirklich keinen Grund für die Verzögerung in jedem Fall.

Danke für jede Hilfe.

Antwort

0

Das Problem passierte, weil ich einige Stubs mit proxyquire machte und standardmäßig die npm-Module geladen werden, selbst wenn sie stubbed sind. In meinem Fall habe ich ein Modul namens Node-Chartist, das während des ersten Komponententests geladen wurde, und die anderen Komponententests benutzten Cache, nehme ich an. Deshalb waren die anderen Komponententests nicht langsamer.

Um dieses Problem zu lösen, musste ich die Methode noCallThru() von proxyquire verwenden, die proxyquire keine ursprünglichen Abhängigkeiten laden.

Mit freundlichen Grüßen

Verwandte Themen