2016-02-18 20 views
13

W jaki sposób można wykryć użycie niepożądanych funkcji w podstawie kodu w Węzłach, w szczególności Gulp?Wykrywanie niepożądanych funkcji (fdescribe, describe.only) jako zadania Gulp

Jestem po sprawdzeniu nieumyślnie uszkodzone specyfikacji, tj ddescribe/fdescribe i iit/fit dla Jasmine lub .only i .skip dla Mocha:

// should be reported 
fdescribe(function() { 
    // should not be reported 
    it(function() { 
    var fit = ...; 
    this.fit = ...; 
    }); 

    // should not be reported 
    // fit(function() { ... }); 

    // should be reported 
    xit(function() { ... }); 

    // should be reported 
    fit(function() { ... }); 
}); 

// should be reported 
describe.only(function() { 
    // should not be reported 
    it(function() { ... }); 

    // should not be reported 
    // it.only(function() { ... }); 

    // should be reported 
    it.skip(function() { ... }); 

    // should be reported 
    it.only(function() { ... }); 
}); 

Zadanie powinno wyjść z błędu oraz nazwy plików wyjściowych i numery linii, w których używane są wymienione funkcje.

Te skomentowane z pewnością nie muszą być wykrywane, a także funkcje/właściwości o tej samej nazwie (najprawdopodobniej fit), więc proste dopasowanie do wyrażenia regularnego nie jest tutaj tutaj (jak byłoby to dla console.*). Zalecane jest pewne rozwiązanie oparte na AST, które akceptuje nazwy funkcji zdefiniowane przez użytkownika.

Odpowiedz

7

Rozwiążę go na etapie analizy statycznej za pomocą narzędzia do lintowania javascript. Złapać wyłączne/skoncentrowanych specyfikacje mokka przypadkowo pozostawione w kodzie, jest no-exclusive-tests rule realizowane w eslint-plugin-mocha plugin:

Mocha posiada funkcję, która pozwala na przeprowadzanie testów wyłącznie przez dołączając .only do testowego pakietu lub przypadek testowy. Ta funkcja jest naprawdę pomocna w debugowaniu testu na wypadek awarii, więc nie musisz wykonywać wszystkich testów. Po ustaleniu testu i przed wprowadzeniem zmian należy usunąć .only, aby upewnić się, że wszystkie testy zostały wykonane w systemie kompilacji .

Ta reguła przypomina o usunięciu .only z testów, podnosząc ostrzeżenie o wartości , gdy używana jest funkcja wyłączności.

Jeśli chcesz związać bieg eslint do gulp - użyć wtyczki gulp-eslint.


Może być również dobry pomysł, aby uruchomić gulpeslint zadanie zanim zdecydują w haku git. Użyliśmy pakietu pre-git, aby zainstalować i śledzić haki git.

W ten sposób testy skoncentrowane lub wyłączne nie zostaną wprowadzone do bazy kodu.

+0

Nie myślałem o linters w tym celu. Chciałbym mieć rozwiązanie oparte na AST dla nazw zdefiniowanych przez użytkownika funkcji, ale tylko dla globalnych ram testowych eslint-plugin-mocha może być tym, czego potrzebuję. Niestety, wygląda na to, że nie obsługuje '.skip'. – estus

+0

@ Dobre, mieliśmy ten sam dokładny problem, ale z jaśminem. Naprawiliśmy to za pomocą 'eslint' i' eslint-plugin-jaśmin ', uruchamiając zadanie 'grunt eslint' jako pre-commit git hook - teraz, po kilku miesiącach używania tej konfiguracji, mogę powiedzieć, że to naprawdę pomaga utrzymać baza kodów czystych przypadkowych resztek, takich jak skoncentrowane specyfikacje. Miło, że mogłem pomóc. – alecxe

+0

@estus Myślę, że reguła 'eslint-plugin-mocha' ostrzega przed pominięciem: https: // github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/no-global-tests.md. – alecxe