2016-05-09 11 views
0

Ich benutze findRenderedComponentWithType, um sicherzustellen, dass es einen Fehler gibt, und ich benutze chai's assert.throws, aber es funktioniert nicht.ReactTestUtils findRenderedComponentWithType Wurffehler wird von chai nicht erkannt?


zunächst:

TestUtils.findRenderedComponentWithType Dokumentation:

expects there to be one result and returns that one result, or throws exception if there is any other number of matches besides one.


Wenn ich die Funktion verwenden, Im erhalte eine Fehlermeldung (wie erwartet und korrekt). Allerdings kann ich nicht richtig mit Chai behaupten: Ich versuchte assert.throws(TestUtils.findRenderedComponentWithType(element, component), /(Error)/). Aber es sagt, der Test nicht bestanden, auch wenn ich einen Fehler bin immer:

Error: Did not find exactly one match for componentType:function (props, context, updater) { 
[...] 
} 

Antwort

1

Überprüfen Sie die Unterschrift von wirft, ist es eine Funktion erwartet, kein Fehler/Objekt (die das Ergebnis findRenderedComponentWithType ist http://chaijs.com/api/assert/#method_throws.

So wollen Sie so etwas wie

cons fn =() => TestUtils.findRenderedComponentWithType(element, component) 
assert.throws(fn) 
+0

vor allem es funktioniert dank tun. ich lese eigentlich, dass vor auch, aber ich wusste nicht, Methode und Funktion per Definition anders, aber dann habe ich noch nicht wirklich sehen, wie dies ein Unterschied gemacht hat Chai nur was im ersten Parameter ausführen, dann überprüfen, was es ausgegeben? Hat es etwas mit Callback zu tun? – user308553

+1

Ihre ursprüngliche Implementierung hat keine Funktion (oder Methode) übergeben. Es hat mit der Reihenfolge, in der Dinge ausgeführt werden, zu tun. Das 'TestUtils.findRenderedComponentWithType (Element, Komponente)' wird zuerst ausgeführt und gibt entweder ein Component-Objekt zurück oder gibt einen Fehler aus. Du bist wirklich in einer dieser Arten. Denken Sie daran, wie es implementiert werden könnte. Es nimmt eine Funktion, dann wickelt es es in einen try/catch-Block THEN führt es aus. Während du es hinter den Kulissen THEN ausführteest, wurde es eingewickelt, aber dann ist es zu spät; Der Fehler wurde ausgelöst – ken4z

+1

Als eine Randnotiz möchten Sie vielleicht https://github.com/airbnb/enzym auschecken. Ich fand die ReactTestUtils-Bibliothek etwas mühsam (vor allem diese Methodennamen) und schrieb meine eigene, bevor Enzyme verfügbar wurde. – ken4z