2017-06-13 4 views
3

Es gibt eine einfache Methode ist, die einen Fehler wirft:Mokka/Chai: Test für genaue throw Fehlerergebnis

methods.js

insertItem = new ValidatedMethod({ 
    name : 'article.insert.item', 
    validate: new SimpleSchema({ 
     parent: { type: SimpleSchema.RegEx.Id } 
     value : { type: String } 
    }).validator(), 

    run({ parent, value}) { 
     var isDisabled = true 
     if (isDisabled) 
      throw new Meteor.Error('example-error', 'There is no reason for this error :-)') 
    } 
}) 

Jetzt möchte ich eine Mokka Test tun für diesen Fehler. So kam ich mit diesem nach oben, die funktioniert:

server.test.js

it('should not add item, if element is disabled', (done) => { 
    const value = 'just a string' 

    function expectedError() { 
     insertItem.call(
      { 
       parent: '12345', 
       value 
      } 
     ) 
    } 

    expect(expectedError).to.throw 
    done() 
}) 

Bis zu diesem Punkt alles funktioniert.

Das Problem

Aber ich würde für die genaue Fehlermeldung testen möchten.

Ich habe bereits versucht

expect(expectedError).to.throw(new Meteor.Error('example-error', 'There is no reason for this error :-)')) 

Aber es gibt mir ein Versagen Test:

Error: expected [Function: expectedError] to throw 'Error: There is no reason for this error :-) [example-error]' 

Antwort

0

Ich denke, die docs ein wenig irreführend sind/auf diese verwirrend - nur die new Betreiber von Ihrem expect entfernen und es entspricht dem Fehler:

expect(expectedError).to.throw(Meteor.Error('example-error', 'There is no reason for this error :-)'))

+0

Sie haben auch 'var disabled = true' ABER' if (isDisabled) 'in der nächsten Zeile - aber ich nehme an, dies ist nur Beispielcode nicht von Ihrer Funktion kopiert – rubie

+0

Damit ist der Test immer noch fehlgeschlagen:' Fehler: erwartet [Funktion: expectedError] einen Fehler zu werfen " – user3142695

+0

@ user3142695 Ich habe das oben ein paar Mal mit Ihrem Beispielcode getestet und es wirft den richtigen Fehler. Haben Sie beide die 'neuen' und die' var disabled'/'if (isDisabled) Teile entfernt? – rubie