2013-03-29 2 views
4

나는 Zombie.js와 Mocha와의 통합 테스트를 설정 중이며 첫 번째 browser.visit() 호출 만 성공하는 수수께끼 같은 문제에 직면하고 있습니다. 내 사양은 다음과 같이 :여러 번의 방문에 대해 Zombie.js "주장이 정의되지 않았습니다"?

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를로드하는 시험의 은 사고없이 전달합니다. 그러나 이후의 모든 테스트는 다음과 같은 스택 트레이스 생성 실패 :

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에서

답변

3

여기에 언급 된 노드 버전> = 0.10에서 발생하는 호환성 문제 인 것 같습니다. https://github.com/assaf/zombie/issues/487

https://github.com/assaf/zombie/issues/487#issuecomment-15548684에서 언급 된 해결 방법은 내 특정 문제를 해결합니다. 나는 즉시 좀비를 가져 오기 전에 내 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 

내 모든 테스트 불평없이 통과, 그렇게 가졌어요. 이 문제는 향후 좀비 개정판에서 패치 될 것으로 예상되지만, 지금은 위의 해킹으로 해결할 수 있습니다.

관련 문제