2016-03-25 12 views
2

Ich benutze Chai.should und ich muss für eine Ausnahme prüfen, aber was auch immer ich versuche, kann ich es nicht zur Arbeit bekommen. Die docs nur erklären expect :(Wie man für geworfenen Fehler mit Chai.should prüft

Ich habe diese Singleton-Klasse, die einen Fehler aus, wenn Sie versuchen,

new MySingleton(); 

Hier ist der Konstruktor, der den Fehler wirft

constructor(enforcer) { 
    if(enforcer !== singletonEnforcer) throw 'Cannot construct singleton'; 
    ... 

Nun möchte Ich mag an Überprüfen Sie, ob dies der Fall ist

it('should not be possible to create a new instance',() => { 
    (function() { 
     new MySingleton(); 
    })().should.throw(Error, /Cannot construct singleton/); 
}); 

oder

new MySingleton().should.throw(Error('Cannot construct singleton'); 

Keine dieser Arbeiten. Wie wird das gemacht? Irgendwelche Vorschläge ?

+0

Diese Frage ist kein Duplikat. Es fragt nach dem 'subject.should.throw' Stil. Die andere Frage ist für den Erwartungsstil. –

Antwort

2

Das Problem hier ist, dass Sie die Funktion direkt ausführen, effektiv verhindern, dass Chai einen try{} catch(){} Block um es wickeln kann. Der Fehler wird ausgelöst, bevor der Anruf die should -Eigenschaft erreicht.

Probieren Sie es wie folgt aus:

it('should not be possible to create a new instance',() => { 
    (function() { 
     new MySingleton(); 
    }).should.throw(Error, /Cannot construct singleton/); 
}); 

oder dies:

MySingleton.should.throw(Error('Cannot construct singleton'); 

Auf diese Weise können Chai für Sie den Funktionsaufruf behandeln.

+1

Ich möchte nur hinzufügen, wenn jemand Parameter an die Funktion übergeben möchte, können Sie 'myfunc.bind (foo, bar) .should.throw (...)' tun. –

0

Ich weiß, das ist eine beantwortete Frage, aber ich würde immer noch gerne meine zwei Cent werfen.

Es gibt einen Abschnitt in der Formatvorlage dafür, nämlich: http://chaijs.com/guide/styles/#should-extras. Also, was wie sieht in der Praxis:

should.Throw(() => new MySingleton(), Error); 

Es ist gar nicht so verschieden von der akzeptierten Antwort, ich finde es ein bisschen besser lesbar aber, und mehr im Einklang mit ihrer Richtlinie.

Verwandte Themen