簡體   English   中英

RequireJS / AMD模塊中的JavaScript代碼覆蓋率

[英]JavaScript code coverage in RequireJS / AMD modules

簡短而且看似愚蠢的問題,因為這么簡單,你會想到無處不在:有沒有人在RequireJS前端項目(非NodeJS)中使用任何類型的代碼覆蓋?

這似乎是一個愚蠢的問題,因為JS世界中TDD方法的普及以及AMD開發的接管。

我已經嘗試了一百萬種方法,但都缺乏。 我的項目是一個帶有Jasmine單元測試的Backbone項目:

1)帶有Coverage插件的JSTD。 JSTD無法正確加載和檢測AMD模塊。 如果我在單個js文件上運行JSTD(由RequireJS優化器組合),那么代碼覆蓋率可以很好地工作,除了收集覆蓋范圍並在ENTIRE文件上定義度量標准。 太棒了,這沒用,因為它包括第三方庫,因為我無法針對單個單元來幫助測試開發。 哎呀。

2)JSCoverage - 總失敗,不喜歡AMD模塊。

3)特定於Chrome和Firebug的“現場”指導員 - 失敗,不喜歡AMD模塊。

我嘗試的每一種方法似乎都需要大量的定制工作。 那么也許我需要從頭開始自定義解決方案?

如何使用以下方法:將RequireJS優化器擴展為儀器代碼並創建覆蓋范圍。 它將是內存中的檢測,可以使用require.config({instrument:true})標志啟用。 每次需要加載模塊時,它會自動對其進行檢測並將其放置在模塊庫中。 覆蓋率統計信息收集在全局require對象下的對象中,並且可以從任何地方訪問,例如,在Jasmine測試運行之后。

輸入?

Blanket.js使用修改后的RequireJS加載程序與Qunit一起使用。 我們正致力於Jasmine的支持,並樂意接受任何反饋或建議。

如果您的項目正在投入生產,Blanket.js不適合您,但如果它只是一個側面項目,那么它是否值得查看它是否符合您的需求。

編輯:Blanket現在支持Jasmine。

好吧,事實證明Node-Coverage實際上提供了一個AMD不可知的接口,它可以與RequireJS和Jasmine一起使用,通過提供從其自己的服務器檢測的代碼。

我還會花一些時間研究我開始的RequireJS覆蓋實現,因為它不需要運行單獨的服務器。

究竟是你的AMD模塊和JSCoverage的問題? 我有一個運行AMD模塊的設置(QUnit / PhantomJS / JSCoverage)。

也許您只是忘了在require.config中設置正確的庫路徑?

在我更改庫路徑以使用已檢測的代碼而不是“普通”文件后,一切正常。

查看我最近發布的用於簡單的javascript瀏覽器覆蓋率報告的項目,JSCovReporter https://github.com/TwoApart/JSCovReporter

mochawrapper

我剛剛編寫了一個自動覆蓋報告的節點模塊。 它基於mocha,jscoverage和node的斷言。 您不必修改require或使用make或enviornment變量。

它托管在github: mochawrapper上

jscoverage可能無法在瀏覽器中運行,因此您可能需要查看:基於uglify-js的Bunker

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM