2012-04-21 7 views
7

Próbuję zmusić Mocha do oglądania mojego projektu do testu i ciągłego uruchamiania testów, ale kiedy używam flagi -w, pojawia się błąd.Błąd "Brak takiego modułu", gdy próbuję zmusić Mocha do oglądania mojego projektu

Oto test wykonuje dobrze:

C:\Foo>mocha 

    . 

    ? 1 tests complete (3ms) 

i tutaj z -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) 

mam Mocha zainstalowane globalnie (npm install -g mocha) i należy zainstalować lokalnie do projektu.

Używam węzła v0.6015, Mocha 1.0.1 i powinienem 0.6.1 na 64-bitowym systemie Windows 7 Home Premium.

+0

Jak zainstalowałeś? – srquinn

+0

@jibsales Via NPM, patrz wiersz poniżej powyższego błędu. –

+0

Przepraszam, miałem na myśli, jak zainstalowałeś węzeł – srquinn

Odpowiedz

5

udało mi się zrobić to działa na windows zmieniając kilka plików kodu źródłowego mokka. npm Po zainstalowaniu mocha (w moim przypadku zainstalowany tylko dla mojego projektu, a nie globalnie):

1) Najpierw idź do node_modules \ mokka \ lib \ utils.js znaleźć i naprawić zegarków funkcję następująco :

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

Wymieniłem fs.watchFile z fs.watch (zob https://github.com/fgnass/node-dev/issues/26 dla szczegółów), ponieważ pierwszy nie wydają się działać w systemie Windows.

2) Teraz otwarte node_modules \ mokka \ bin \ _mocha i zastosować następujące poprawki:

a) Znajdź i wykomentowac poniższy kod:

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

Ponieważ nie ma odpowiednika POSIX linie sygnałów powyżej muszą zostać usunięte (najlepiej zastąpione odpowiednią implementacją, więcej szczegółów można znaleźć na stronie What is the Windows equivalent of process.on('SIGINT') in node.js?)

b) Znajdź następujący kod utils.watch (watc hFiles, function() {... i zastąpić go

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

To dławi nadmiernych callacks z fs.watch.

c) Ostatnie zmiany jest usunięcie lub komentując tę ​​linię:

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

w odtwarzania Funkcja (ARR, interwał). Po prostu usuwa szum.

+0

To działa dobrze, dziękuję za rozwiązanie. Czy wiesz, jak wymusić wyczyszczenie terminala po każdym ponownym uruchomieniu? – WHITECOLOR

+0

Problem polega na tym, że restartuje testy po zmianie plików. Ale nie uwzględnia zmian (z wyjątkiem zmian w pliku testowym). – WHITECOLOR

+0

Nie próbuj usuwać terminalu. Odbiera wszystkie zmiany plików w moim środowisku, ale testowałem tylko skrypty w folderze lib bez żadnych podkatalogów. Spróbuj rzucić okiem na _mocha, tam jest ustawione monitorowanie plików, jeśli się nie mylę. –

Powiązane problemy