2016-02-18 48 views
13

如何在Node中檢測代碼庫中不需要的函數的使用情況,特別是Gulp?在Gulp任務中檢測不需要的函數(fdescribe,describe.only)

檢查無意中被寵壞的規格後,我即ddescribe/fdescribe和茉莉花iit/fit.only.skip爲摩卡:

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

的任務應該與錯誤退出並輸出使用列出的功能的文件名和行號。

註釋的註釋不一定要被檢測到,以及具有相同名稱的功能/屬性(最有可能的是fit),所以簡單的正則表達式匹配在這裏不是一個選項(就像console.*那樣)。讚賞一些接受用戶定義函數名稱的基於AST的解決方案。

回答

7

我會解決它的靜態分析步驟通過ESLint javascript linting實用程序。爲了趕上在代碼庫中不小心留下的獨家/集中摩卡規範,存在實施了no-exclusive-tests ruleeslint-plugin-mocha plugin

摩卡有一項功能,允許您通過 附加.only的測試套件或僅僅運行測試一個測試用例。這個特性實際上是 有助於調試一個失敗的測試,所以你不必執行所有的測試 。在修復測試之後,在提交 更改之前,您必須刪除.only以確保所有測試都在 您的構建系統上執行。

此規則提醒您在使用排他性功能時通過提高 警告來從您的測試中刪除.only

如果你想在eslint運行綁gulp - 使用gulp-eslint插件。


它也可能是運行gulpeslint任務提交在一個git前的鉤一個好主意。我們使用了pre-git包來安裝和跟蹤git鉤子。

這樣,重點測試或排他性測試不會進入代碼庫。

+0

我沒有爲此考慮過絨毛。我想爲用戶定義的函數名稱提供基於AST的解決方案,但僅適用於測試框架全局變量eslint-plugin-mocha可能是我需要的。不幸的是,它看起來不支持'.skip'。 – estus

+0

@estus好,我們有同樣的確切問題,但與茉莉花。我們已經用'eslint'和'eslint-plugin-jasmine'修復了這個問題,現在運行'grunt eslint'任務作爲預先提交的git鉤子 - 現在,在使用這個設置幾個月後,我可以說它確實有助於保持代碼清理偶然的殘留像聚焦的規格。樂意效勞。 – alecxe

+0

@estus我認爲這個'eslint-plugin-mocha'規則會提醒skip:https:// github。COM/lo1tuma/eslint-插件-摩卡/斑點/主/文檔/規則/ no-global-tests.md。 – alecxe