2017-11-10 9 views
0

몇 가지 이유로 내 테스트 슈트의 첫 번째 단위 테스트는 항상 다른 단위 테스트보다 느립니다. 내 콘솔에서 테스트를 실행할 때 내가 좋아하는 뭔가를 얻을 : 일부모카 첫 번째 단위 테스트는 항상 다른 단위보다 느립니다.

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

:

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

을하지만 코드에서 내가 단위 테스트 상기 A에 단위 테스트 B를 변경하는 경우,이 얻을 첫 번째 단위 테스트가 항상 느려지는 이유는 내 코드가 느린 이유지만 모카의 경우가 원인이라고 생각합니다. 동시에 나는 다른 사람들이 다른 코드를 테스트하는 슈트를 가지고 있고 잘 동작하므로 혼란 스럽다. 어쩌면 모카가 아니지만 확실하지 않기 때문에 어떤 일이 벌어 질지 생각해 볼 필요가 있습니다.

테스트는 다음과 같이이다 : 나는 성공없이 다른 프로젝트에서 재현하려고

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(); 
    ... 
    }); 
}) 

`

, 그래서 나는 당신이 그것을 할 수있을 것입니다 의심하지 않지만, 내가 무엇을하고 있어요 위의 단위 테스트 A와 함께 테스트를 실행 한 다음 위의 단위 테스트 B와 함께 테스트를 수행합니다.

버전 :

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는 단위 테스트를 실행하는 동안, 없음 네트워크 요청이 지연이 모든 네트워크의 요청에 의해 발생한 것이 아닌지 확인하기 위해, 외부를 위해 만들어지는 것을 확인 피들러 사용.

또한 단위 테스트가 테스트하는 코드를 디버깅했으며 어떤 경우에도 지연에 대한 이유를 실제로 볼 수 없습니다.

도움 주셔서 감사합니다.

답변

0

프록시 큐를 사용하여 일부 스텁을 만들기 때문에 문제가 발생했으며 기본적으로 npm 모듈은 스텁되었을 때도로드됩니다. 제 경우에는 node-chartist라는 모듈이 첫 번째 단위 테스트 중에로드되고 다른 단위 테스트는 캐시를 사용한다고 가정합니다. 이것이 다른 단위 테스트가 더 느린 이유는 아닙니다.

이 문제를 해결하려면 proxyquire의 noCallThru() 메소드를 사용하여 원래의 종속성을로드하지 않아야했습니다.

친절한 답변