Mocha/Chai Expect.to.throw-Rätsel: Ausgeworfene Fehler auffangen
Chais Expect.to.throw-Behauptung scheint beim Auffangen schwer fassbar zu sein Fehler richtig geworfen. Trotz des Schreibens von Testfällen schlagen die Behauptungen mit „expect.to.throw“ immer wieder fehl.
Zur Verdeutlichung betrachten wir das folgende Code-Snippet:
it('should throw an error if you try to get an undefined property', function (done) { var params = { a: 'test', b: 'test', c: 'test' }; var model = new TestModel(MOCK_REQUEST, params); expect(model.get('z')).to.throw('Property does not exist in model schema.'); expect(model.get('z')).to.throw(new Error('Property does not exist in model schema.')); });
Wie sich herausstellt, ist der Kern der Das Problem liegt in der Art und Weise, wie wir den Ausdruck an „expect.to.throw“ übergeben.
Die Lösung: Wrapping the Funktion
Um dieses Problem zu beheben, müssen wir eine Funktion an Expect.to.throw übergeben, die anschließend aufgerufen wird. Der folgende angepasste Code funktioniert nun wie vorgesehen:
it('should throw an error if you try to get an undefined property', function (done) { var params = { a: 'test', b: 'test', c: 'test' }; var model = new TestModel(MOCK_REQUEST, params); expect(model.get.bind(model, 'z')).to.throw('Property does not exist in model schema.'); expect(model.get.bind(model, 'z')).to.throw(new Error('Property does not exist in model schema.')); });
Durch die Verwendung der Bind-Methode erstellen wir eine neue Funktion, die beim Aufruf „model.get“ mit dieser Einstellung auf „model“ und dem anfänglichen Argumentsatz aufruft zu 'z'.
Erklärung der Bindung
In diesem Zusammenhang spielt bind eine entscheidende Rolle. Es generiert eine neue Funktion, die beim Aufruf dieselben Argumente wie das Original akzeptiert, jedoch einen bestimmten Wert dafür aufweist. In unserem Fall ist dieser Wert model und das Argument ist 'z'.
Wenn wir das Ergebnis von model.get('z') an Expect.to.throw übergeben, übergeben wir im Wesentlichen das geworfene Fehler in der Behauptung. Der Zweck von Expect.to.throw besteht jedoch darin, zu überprüfen, ob eine bestimmte Funktion beim Aufruf eine Ausnahme auslöst. Daher müssen wir die Funktion selbst und nicht ihr Ergebnis übergeben. Die Bind-Methode ermöglicht uns genau das.
Weitere Informationen zu Bind finden Sie unter dem bereitgestellten Link.
Das obige ist der detaillierte Inhalt vonWarum kann meine Mocha/Chai-Behauptung „expect.to.throw' ausgelöste Fehler nicht abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!