2015-12-15 16 views
6

mam to (w gulpfile.js):Run mokka z wyłączeniem ścieżki

var gulp = require("gulp"); 
var mocha = require("gulp-mocha"); 
gulp.task("test", function() { 
    gulp 
     .src(["./**/*_test.js", "!./node_modules/**/*.js"]); 
}); 

i to działa.

chcę powtórzyć to samo zachowanie, wyłączeniem "node_modules" Folder, z poleceniem mocha, prowadzenie testu npm (w package.json):

"scripts": { 
    "test": "mocha **\\*_test.js !./node_modules/**/*.js*", 
} 

i to nie działa.

Używam systemu Windows.

Jakieś sugestie?

Odpowiedz

0

jako zasugerował w komentarzu @thebearingedge, w końcu Umieściłem WSZYSTKIE pliki źródłowe (wraz z relatywnymi plikami testowymi) w nowym katalogu "src".
W ten sposób mogę zdefiniować katalog główny dla testów ze ścieżką, która domyślnie wyklucza folder "node_modules".

. 
├── src 
    ├── fileA.js 
    ├── fileA_test.js 
    ├── fileB.js 
    ├── fileB_test.js 
├── node_modules 
    ├── ... 

musiałem zaktualizować ścieżka w package.json, gulpfile.js a w niektórych plikach wsadowych, które używam jako narzędzi.

Zmiany gulpfile.js:

.src(["./src/**/*_test.js"]); 

iw package.json:

"test": "mocha src\\**\\*_test.js", 

prosta zmiana i to działa.

  • Mogę wybrać dowolne konwencje nazewnictwa.
  • Każdy plik testowy pozostaje blisko względnego pliku.
+0

Szkoda, że ​​musieliście ... to dość popularny wzór, aby trzymać testy blisko testowanej logiki - ja osobiście wolę to. Opcją, którą możesz wypróbować, jest dodanie do plików takich jak "testfile.spec.js" i po prostu dopasowanie wszystkich plików, które kończą się na '.spec.js'. Może nadaj mu wir w kolejnym projekcie! – Spen

+0

Dlaczego to wstyd? Właśnie przeniosłem wszystkie pliki źródłowe to folder "src". Nie przeniosłem plików testowych, pozostają one blisko swojej logiki, tak jak poprzednio. Nie muszę się też martwić o nazewnictwo konfliktów konwencyjnych (dotyczyło to "_test.js, ale innym razem może to być .spec.js). W ten sposób domyślnie wykluczony jest ewentualny konflikt z" node_modules ". (przez @thebearingedge) był prosty i skuteczny –

4

Nie jestem guru na wzór mocha lub ant-style, ale może nie jest możliwe uniknięcie określonej ścieżki w linii poleceń mocha.

Możesz umieścić wszystkie swoje pliki testowe pod folderze testowym i ustawić package.json takiego:

"scripts": { 
    "test": "mocha ./test/**/*_test.js" 
} 

Można również dostarczyć więcej niż jeden folder wywoławcza:

"scripts": { 
    "test": "mocha ./test/**/*_test.js ./another_test_folder/**/*_test.js" 
} 
+1

Nie, nie chcę umieszczać wszystkich moich plików testowych pod określonym folderem. Zdecydowałem się na plik * _test.js W POBLIŻU plików do przetestowania. Mam wiele folderów zawierających pliki testowe. Problem polega na tym, że dodałem pakiet Unit.js i używa on tej samej konwencji nazewnictwa dla plików testowych (* _test.js), więc teraz mój mocha run przechwytuje te testy. Nie chcę też zmieniać konwencji nazewnictwa. Dzięki za sugestię, jest dobrze. –

+1

Czy masz przynajmniej swoje źródło projektu w swoim własnym folderze? W ten sposób możesz wskazać mocha na 'src/**/* _ test.js' i zachować pliki testowe w pobliżu źródła. Z wyjątkiem naprawdę małych modułów z tylko jednym plikiem źródłowym, umieszczanie plików js w dedykowanym katalogu takim jak 'src' lub' lib' wydaje się być powszechną praktyką. – thebearingedge

+0

To byłaby właściwa odpowiedź, gdyby pytanie brzmiało: Jak mogę ponownie ustawić całą strukturę projektu, aby uruchomić tylko niektóre testy? – BentOnCoding

0

Posiadałem katalog spec zawierający wszystkie moje specyfikacje. W tym katalogu miałem kilka podkatalogów, z których jednym był katalog specyfikacji e2e. W tym scenariuszu użyłem polecenia mocha specs $(find specs -name '*.js' -not -path "specs/e2e/*"), aby uruchomić wszystkie moje testy, ignorując je w katalogu e2e.

+0

Wolę tego uniknąć.Tak wolę mieć mój plik_firmy.js blisko pliku myfile.js.W ten sposób próbuję "zmusić" mnie (i inne) do tworzyć pliki testowe, jest również natychmiastowy do znalezienia plików, które nie są testowane.Jest również łatwiej zmienić nazwę/usunąć pliki testowe, gdy zmiana pochodzenia.Tak w praktyce znalazłem w ten sposób bardziej skuteczny. –

5

Udało mi się rozwiązać to za pomocą wzorów globbing w argumencie do mocha. Tak jak ty, nie chciałem umieszczać wszystkich moich testów pod jednym folderem tests. Chciałem, żeby były w tym samym katalogu, co klasa, którą testowali.Moja struktura plik wyglądał następująco:

project 
|- lib 
    |- class1.js 
    |- class1.test.js 
|- node_modules 
    |- lots of stuff... 

Running to z folderu project pracował dla mnie:

mocha './{,!(node_modules)/**}/*.test.js' 

Która pasuje do dowolnego pliku w drzewie *.test.js, tak długo jest jego ścieżka nie jest zakorzenione w ./node_modules/.

To jest online tool do testowania wzorców globalnych, które okazały się przydatne.

+0

dzięki, ten działa tylko dla mnie , po kilku innych próbach. – Kostanos

Powiązane problemy