diff options
Diffstat (limited to 'preact/test-utils/test/shared/rerender.test.js')
-rw-r--r-- | preact/test-utils/test/shared/rerender.test.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/preact/test-utils/test/shared/rerender.test.js b/preact/test-utils/test/shared/rerender.test.js new file mode 100644 index 0000000..a2e4335 --- /dev/null +++ b/preact/test-utils/test/shared/rerender.test.js @@ -0,0 +1,59 @@ +import { options, createElement, render, Component } from 'preact'; +import { teardown, setupRerender } from 'preact/test-utils'; + +/** @jsx createElement */ + +describe('setupRerender & teardown', () => { + /** @type {HTMLDivElement} */ + let scratch; + + beforeEach(() => { + scratch = document.createElement('div'); + }); + + it('should restore previous debounce', () => { + let spy = (options.debounceRendering = sinon.spy()); + + setupRerender(); + teardown(); + + expect(options.debounceRendering).to.equal(spy); + }); + + it('teardown should flush the queue', () => { + /** @type {() => void} */ + let increment; + class Counter extends Component { + constructor(props) { + super(props); + + this.state = { count: 0 }; + increment = () => this.setState({ count: this.state.count + 1 }); + } + + render() { + return <div>{this.state.count}</div>; + } + } + + sinon.spy(Counter.prototype, 'render'); + + // Setup rerender + setupRerender(); + + // Initial render + render(<Counter />, scratch); + expect(Counter.prototype.render).to.have.been.calledOnce; + expect(scratch.innerHTML).to.equal('<div>0</div>'); + + // queue rerender + increment(); + expect(Counter.prototype.render).to.have.been.calledOnce; + expect(scratch.innerHTML).to.equal('<div>0</div>'); + + // Pretend test forgot to call rerender. Teardown should do that + teardown(); + expect(Counter.prototype.render).to.have.been.calledTwice; + expect(scratch.innerHTML).to.equal('<div>1</div>'); + }); +}); |