首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zombie.js“断言未定义”用于多次访问?

Zombie.js“断言未定义”用于多次访问?
EN

Stack Overflow用户
提问于 2013-03-29 04:28:17
回答 1查看 1.3K关注 0票数 4

我正在使用Zombie.js和Mocha进行集成测试,遇到了一个令人费解的问题,似乎只有第一个browser.visit()调用成功。我的规格是这样的:

代码语言:javascript
复制
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.html )通过时没有发生事故。但是,所有后续测试都会失败,产生如下堆栈跟踪:

代码语言:javascript
复制
 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
EN

回答 1

Stack Overflow用户

发布于 2013-03-29 12:18:18

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

https://github.com/assaf/zombie/issues/487#issuecomment-15548684中提到的解决方案解决了我的特殊问题。在导入僵尸之前,我将以下代码添加到我的testi/common.coffee文件中:

代码语言:javascript
复制
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

这样做了,我所有的测试都通过了,没有抱怨。我预计这一问题将在未来僵尸的修订中得到修补,但就目前而言,上述攻击使其可行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15697354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档