我想測試將錯誤在我的search.coffee類拋出的情況下:Node.js + Mocha + Should.js如何測試eventemitter拋出的錯誤?
讓我們假設我的測試,我FO cn的
search.coffee
{ EventEmitter } = require 'events'
connectors = require './connectors'
class Search extends EventEmitter
constructor: (@query, @credentials, dispatch = true) ->
@connectors = @_connectors()
if @connectors.length == 0
# want to test this
@emit 'error', new Error 'Search could not be dispatched to any connectors'
@_dispatch(query, connector) for connector in @connectors if dispatch
我有嘗試了以下方法,但是,由於發生錯誤的事件,new Search()
本身的返回不會引發錯誤。我怎樣才能捕捉到這個拋出的錯誤?
search_spec.coffee
Search = require '../../src/search'
describe "search.coffee", ->
describe "constructor", ->
it 'should return an error if no credentials match loaded connectors', ->
new Search("foo", { }, false).should.throw()
有趣的 - 所以在另一個類(Client.coffee),這是不是我原來的問題,綁定到'.on('error')'事件。但據我所知,無論如何,因爲我永遠不會有機會首先實例化一個'Search',然後綁定到'error'事件,我的'Client'類將永遠不會收到這個錯誤事件? – professormeowingtons
沒錯。您必須使用我在答案中列出的選項之一才能解決此問題。我沒有提到的另一個選項,但現在發生在我身上的是將另一個對象用作通信通道。該對象將在「Search」之前創建並傳遞給「Search」的構造函數。一個''Search''對象會在這個通信通道上發出事件。 – Louis
好主意,並感謝您的詳細建議。 – professormeowingtons