2012-04-21 2 views
7

Mocha가 테스트를 위해 프로젝트를보고 끊임없이 테스트를 실행하려고 시도하지만 -w 플래그를 사용할 때 오류가 발생합니다. Mocha가 프로젝트를 보려고 할 때 "No such module"오류가 발생합니다.

다음은 시험 잘 실행 : -w

C:\Foo>mocha -w 


node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: No such module 
    at EventEmitter.<anonymous> (node.js:392:27) 
    at Object.<anonymous> (C:\Users\Greg\AppData\Roaming\npm\node_modules\mocha\bin\_mocha:203:11) 
    at Module._compile (module.js:441:26) 
    at Object..js (module.js:459:10) 
    at Module.load (module.js:348:31) 
    at Function._load (module.js:308:12) 
    at Array.0 (module.js:479:10) 
    at EventEmitter._tickCallback (node.js:192:40) 

와 여기

C:\Foo>mocha 

    . 

    ? 1 tests complete (3ms) 

나는 모카는 전 세계적으로 (npm install -g mocha) 설치 프로젝트에 로컬로 설치해야합니다.

저는 64 비트 Windows 7 홈 프리미엄에서 노드 v0.6015, 모카 1.0.1 및 0.6.1을 사용해야합니다.

+0

어떻게 설치하셨습니까? – srquinn

+0

@jibsales NPM을 통해 위의 오류 아래 줄을 참조하십시오. –

+0

죄송합니다. 어떻게 설치하셨습니까? 노드 – srquinn

답변

5

나는 모카 소스 코드 파일의 몇 가지를 변경하여 윈도우에서 작동 할 수 있었다. NPM은 모카를 설치 한 후 (내 경우에는 내가하지 세계적으로, 그냥 내 프로젝트를 위해 그것을 설치) :

1) 먼저 node_modules로 이동 \ 모카 \ lib 디렉토리 \ utils.js 찾아 다음과 같이 시계 기능을 수정 : 첫 번째 윈도우에서 작동하지 않기 때문에

exports.watch = function(files, fn) { 
    var options = { interval: 100 }; 
    files.forEach(function(file) { 
     debug('file %s', file); 
     fs.watch(file, options, function(curr, prev) { 
      fn(file); 
     }); 
    }); 
}; 

내가 fs.watch (자세한 내용은 https://github.com/fgnass/node-dev/issues/26 참조) fs.watchFile를 교체했다.

2) 이제 개방 node_modules \ 모카 \ 빈 \ _mocha 및 적용 다음과 같은 수정 :

A) 찾기 및 주석 또는 다음 코드 제거 : POSIX의 상응이 없기 때문에

process.on('SIGINT', function(){ 
    showCursor(); 
    console.log('\n'); 
    process.exit(); 
}); 

을 위의 신호 라인을 제거해야합니다 (자세한 내용은 What is the Windows equivalent of process.on('SIGINT') in node.js? 참조).

b) 다음 코드 찾기 utils.watch (watc hFiles 함수() {... 그리고 그것은 fs.watch 과도한 callacks을 조절하는

var lastRun = new Date(); 
    utils.watch(watchFiles, function(){ 
    if (new Date() - lastRun > 300) 
    { 
     purge(); 
     stop() 
     mocha.suite = mocha.suite.clone(); 
     ui = interfaces[program.ui](mocha.suite); 
     loadAndRun(); 
     lastRun = new Date(); 
    } 
    }); 

로 대체.

c) 최종 변경 제거하거나 줄을 주석된다

process.stdout.write('\r' + str); 

함수 플레이 (도착 간격)을. 그것은 단지 소음을 제거합니다.

+0

괜찮습니다. 해결책을 가져 주셔서 감사합니다. 다시 시작할 때마다 터미널을 강제로 종료하는 방법을 알고 있습니까? – WHITECOLOR

+0

문제는 파일이 변경 될 때 테스트를 다시 시작한다는 것입니다. 그러나 변경 사항을 고려하지 않습니다 (테스트 파일의 변경 제외). – WHITECOLOR

+0

터미널 지우기를 시도하지 않았습니다. 내 환경의 모든 파일 변경 사항을 선택합니다. 그러나 하위 폴더가없는 lib 폴더의 스크립트 만 테스트했습니다. _mocha를 살펴보고, 내가 잘못하지 않으면 파일 감시가 설정됩니다. –

관련 문제