Ich teste meine React-Komponenten unter jsdom mit my own tiny "virtual browser" utility. Funktioniert gut, bis ich versuche, setState
. Wenn zum Beispiel ein Kind im Alter von Eingangssteuer Prüfung:Aufruf von SetState in jsdom-basierten Tests verursacht "Kann Markup in einem Worker-Thread nicht rendern" Fehler
describe('rendering according to the draft value', function() {
var component;
beforeEach(function() {
component = TestUtils.renderIntoDocument(
React.createElement(ChildrenInput, {value: []})
);
component.setState({draft: [{age: null}, {age: null}]}, done);
});
it('overrides the value property for the count', function() {
assert.strictEqual(component.refs.count.props.value, 2);
});
it('overrides the value property for the ages', function() {
assert.strictEqual(component.refs.age1.props.value, null);
});
});
... auf der setState
Linie Ich erhalte:
nicht erfasste Fehler: Invariant Verletzung: dangerouslyRenderMarkup (...): Kann nicht machen Markup in ein Worker-Thread. Stellen Sie sicher, dass window
und document
global verfügbar sind, bevor Reagieren beim Komponententest erforderlich ist, oder verwenden Sie React.renderToString für das Server-Rendering.
Ich weiß, dass window
und document
Globals in der Tat durch die jsdom-basierten TestBrowser
eingestellt sind, wie folgt aus:
global.document = jsdom.jsdom('<html><body></body></html>', jsdom.level(1, 'core'));
global.window = global.document.parentWindow;
Ich habe sogar versucht setState
in eine setTimeout(..., 0)
zu wickeln. Es hilft nicht. Wie kann ich die Zustandsänderungen testen lassen?
Es sieht so aus, als ob Sie der Autor des von Ihnen erwähnten Dienstprogramms sind. Ich sehe es nirgendwo gespalten. Sie sollten also erwähnen, dass dies Ihr Werkzeug ist. (Dies ist eine SO-Richtlinie.) Außerdem scheint es einige wichtige Informationen zu geben, die bei der Frage fehlen: nämlich wie jsdom initialisiert und von Ihrem Code verwendet wird. Die Zusendung einer externen Website ist kein Ersatz dafür, diese Informationen in die Frage selbst zu stellen. – Louis
Ich habe den Text aktualisiert. Danke für die Rückmeldung. –