![](/img/trans.png)
[英]How to invoke RequireJS modules from old non-AMD Javascript code?
[英]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.