簡體   English   中英

為什么我的摩卡記者會重復報告測試?

[英]Why is my Mocha reporter double reporting tests?

我有一個從文檔報告程序修改的自定義報告程序doc-output.js

 /** * Module dependencies. */ var Base = require('./base') , utils = require('../utils'); /** * Expose `Doc`. */ exports = module.exports = Doc; /** * Initialize a new `Doc` reporter. * * @param {Runner} runner * @api public */ function Doc(runner) { Base.call(this, runner); var self = this , stats = this.stats , total = runner.total , indents = 2; function indent() { return Array(indents).join(' '); } runner.on('start', function() { console.log('<ul id="mocha-report">'); ++indents; }); runner.on('suite', function(suite){ if (suite.root) return; ++indents; console.log('%s<li class="suite">', indent()); ++indents; console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title)); console.log('%s<ul>', indent()); }); runner.on('suite end', function(suite){ if (suite.root) return; console.log('%s</ul>', indent()); --indents; console.log('%s</section>', indent()); --indents; }); runner.on('pass', function(test){ console.log('<li class="test pass fast">'); ++indents; console.log('%s <h2 id="pass">%s</h2>', indent(), utils.escape(test.title)); var code = utils.escape(utils.clean(test.fn.toString())); console.log('%s <pre style="display: none;"><code>%s</code></pre></li>', indent(), code); }); runner.on('fail', function(test, err){ console.log('<li class="test fail">'); ++indents; // console.log('%s::before', indents()); console.log('<h2 id="fail">%s</h2>', utils.escape(test.title)); console.log('%s <pre class="error">%s</pre>', indent(), utils.escape(err)); var code = utils.escape(utils.clean(test.fn.toString())); console.log('%s <pre style="display: block;"><code>%s</code></pre></li>', indent(), code); }); runner.on('end', function() { --indents; console.log('</ul>'); }); } 

我正在使用代碼以編程方式運行Mocha:

 var Mocha = require('mocha'); mocha = new Mocha({ reporter: 'doc-output', ui: 'bdd', quiet: true }); // a file with mocha tests in it mocha.addFile('./simp'); var write = process.stdout.write; var output = ""; process.stdout.write = function(str) { output += str; }; mocha.run(function(failures) { process.stdout.write = write; process.on('exit', function () { process.exit(failures); }); }); 

當我運行它時,輸出變量以html打印。 它報告自己兩次。

 <div id="mocha"> &lt; <ul id="mocha-report"> <li class="suite"> <h1>describe level 1</h1> <ul> <li class="suite"> <h1>describe level 2</h1> <ul> <li class="test pass fast"> <h2 id="pass">it first</h2> <pre style="display: none;"><code>('hello').should.be.a('string'); done();</code></pre> </li> <li class="test pass fast"> <h2 id="pass">it second</h2> <pre style="display: none;"><code>('hello').should.be.a('string'); done();</code></pre> </li> </ul> </li> <li class="suite"> <h1>second nested describe</h1> <ul> <li class="test pass fast"> <h2 id="pass">it</h2> <pre style="display: none;"><code>('hello').should.be.a('string'); done();</code></pre> </li> <li class="test fail"> <h2 id="fail">it should fail</h2> <pre class="error">AssertionError: expected 'hello' to be a number</pre> <pre style="display: block;"><code>('hello').should.be.a('number'); done();</code></pre> </li> </ul> </li> </ul> </li> </ul> &gt;<!--<ul id="mocha-report"--> <li class="suite"> <h1>describe level 1</h1> <ul> <li class="suite"> <h1>describe level 2</h1> <ul> <li class="test pass fast"> <h2 id="pass">it first</h2> <pre style="display: none;"><code>('hello').should.be.a('string'); done();</code></pre> </li> <li class="test pass fast"> <h2 id="pass">it second</h2> <pre style="display: none;"><code>('hello').should.be.a('string'); done();</code></pre> </li> </ul> </li> <li class="suite"> <h1>second nested describe</h1> <ul> <li class="test pass fast"> <h2 id="pass">it</h2> <pre style="display: none;"><code>('hello').should.be.a('string'); done();</code></pre> </li> <li class="test fail"> <h2 id="fail">it should fail</h2> <pre class="error">AssertionError: expected 'hello' to be a number</pre> <pre style="display: block;"><code>('hello').should.be.a('number'); done();</code></pre> </li> </ul> </li> </ul> &gt; </li> </div> 

另外,它在開頭和結尾插入隨機的“ <”和“>”。 我不確定這是否是相關問題。

為什么我的測試報告兩次? 我沒發現記者有什么毛病。

哦,而且,我在使用jade的模板引擎中稱呼它。 像這樣

#{result}

所以我想通了。

<和>來自調用#{result}而不是!{result}

雙重報告來自於對process.stdout.write的監視。 我正在同時復制和監視std,這導致它報告兩次錯誤。

暫無
暫無

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

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