2015-09-26 106 views
5

我正在使用摩卡測試框架來測試Http rest-api。我想爲所有測試用例的測試報告,但是當我跑mocha --reporter html > report.html
獲得以下錯誤運行摩卡測試但出錯:ReferenceError:文件未定義

/usr/local/lib/node_modules/mocha/lib/reporters/html.js:263 
    var div = document.createElement('div'); 
      ^
ReferenceError: document is not defined 
    at fragment (/usr/local/lib/node_modules/mocha/lib/reporters/html.js:263:13) 
    at new HTML (/usr/local/lib/node_modules/mocha/lib/reporters/html.js:53:14) 
    at Mocha.run (/usr/local/lib/node_modules/mocha/lib/mocha.js:459:18) 
    at Object.<anonymous> (/usr/local/lib/node_modules/mocha/bin/_mocha:393:18) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:902:3 

回答

4

命名html記者是只有在瀏覽器中運行摩卡時使用。從命令行運行Mocha將無法使用它。

有一位名叫doc的記者,根據mocha --reporters輸出「html文檔」。順便說一句,當你運行mocha --reporters時,你不會看到html被列爲記者,因爲我上面給出的原因。

0

您應該使用無頭瀏覽器來避免此問題。試用mocha-phantomjs

+1

這並不適用於我,因爲我正在測試Node.JS應用程序,而Mocha-PhantomJS期望基於瀏覽器的測試。 – Calrion

-1

我能夠有條件地定義document來解決這個問題的一個簡化版本:

let document = (typeof document === "undefined") ? {} : document; 

我希望你可以用同樣的方法,但需要設置document的東西,嘲笑createElement

+0

這不可行。 OP將不僅要模擬'createElement',還要模擬getElementsByTagName,getElementById,devicePixeRatio,width,height,getContext,style,className,addEventListener,innerHTML ',還有更多。這是一個**巨大的**任務。 HTML記者希望有一個完整的DOM環境。 – Louis

+0

哦,我錯過了錯誤是摩卡的代碼,而不是被測試的代碼。這是一個更難的問題。原則可能仍然有效,我認爲有些庫可以模擬(接近)完整的DOM,但我不確定這是否是「相同的方法」。 – ShadSterling