Zombie.js“断言没有定义”多次访问?

我正在与Zombie.js和Mocha进行集成testing,并遇到了令人困惑的问题,即只有第一个browser.visit()调用似乎成功了。 我的规格是这样的:

 browser = new Browser site: "http://localhost:101010" describe '/docs', -> ['app', 'server', 'timetable', 'util'].forEach (file) -> describe "/#{file}.html", -> it "documents #{file}.coffee", (done) -> browser.visit "/docs/#{file}.html", -> browser.text('title').should.equal "#{file}.coffee" do done 

其中的第一个加载/docs/app.htmltesting没有发生。 但是,所有后续testing都会失败,产生如下的堆栈跟踪:

  ReferenceError: assert is not defined at Object.HTML5Parser.phases.inBody.startTagBody (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:1828:4) at Object.HTML5Parser.phases.base.processStartTag (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:65:40) at EventEmitter.Parser.do_token (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:2436:21) at EventEmitter.<anonymous> (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:2457:30) at EventEmitter.emit (events.js:117:20) at EventEmitter.emitToken (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:99:9) at emit_current_token (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:873:3) at tag_name_state (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:400:4) at EventEmitter.<anonymous> (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:941:10) at EventEmitter.emit (events.js:95:17) at EventEmitter.HTML5Tokenizer.pump (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:932:11) at EventEmitter.HTML5Tokenizer.tokenize (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:89:23) at EventEmitter.Parser.parse (/home/$USER/projects/timetable/node_modules/zombie/node_modules/html5/lib/html5/parser.js:2391:17) at HtmlToDom.appendHtmlToElement (/home/$USER/projects/timetable/node_modules/zombie/node_modules/jsdom/lib/jsdom/browser/htmltodom.js:91:50) at Object.innerHTML (/home/$USER/projects/timetable/node_modules/zombie/node_modules/jsdom/lib/jsdom/browser/index.js:481:17) at Object.core.HTMLDocument.write (/home/$USER/projects/timetable/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:406:22) at Object.exports.jsdom (/home/$USER/projects/timetable/node_modules/zombie/node_modules/jsdom/lib/jsdom.js:70:9) at History._createDocument (/home/$USER/projects/timetable/node_modules/zombie/lib/zombie/history.js:174:22) at /home/$USER/projects/timetable/node_modules/zombie/lib/zombie/history.js:126:30 at /home/$USER/projects/timetable/node_modules/zombie/lib/zombie/resources.js:147:16 at Request._callback (/home/$USER/projects/timetable/node_modules/zombie/lib/zombie/resources.js:335:16) at Request.self.callback (/home/$USER/projects/timetable/node_modules/zombie/node_modules/request/main.js:120:22) at Request.EventEmitter.emit (events.js:98:17) at Request.<anonymous> (/home/$USER/projects/timetable/node_modules/zombie/node_modules/request/main.js:633:16) at Request.EventEmitter.emit (events.js:95:17) at IncomingMessage.<anonymous> (/home/$USER/projects/timetable/node_modules/zombie/node_modules/request/main.js:595:14) at IncomingMessage.EventEmitter.emit (events.js:117:20) at _stream_readable.js:872:14 at process._tickCallback (node.js:415:13) 

僵尸的browser.visit()不打算被多次调用,还是有其他一些问题吗?

编辑注意版本:

  • Node.js v0.10.1
  • 摩卡v1.8.1
  • 柴v1.5.0
  • Zombie.js v1.4.1

看来这是在Node版本> = 0.10中出现的兼容性问题,如下所述: https : //github.com/assaf/zombie/issues/487

https://github.com/assaf/zombie/issues/487#issuecomment-15548684上提到的解决方法解决了我的特殊问题&#x3002; 在导入Zombie之前,我立即将下面的代码添加到了我的testi/common.coffee文件中:

 do patchEventEmitterToHideMaxListenerWarning = -> return if global.eventEmitterPatched global.eventEmitterPatched = true events = require 'events' Old = events.EventEmitter events.EventEmitter = -> this.setMaxListeners(0) events.EventEmitter.prototype = Old.prototype 

这样做之后,我所有的testing都没有投诉。 我预计这个问题将在未来的僵尸版本中修补,但现在上面的黑客渲染它可行。