JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/5.0.5/mocha.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/5.0.5/mocha.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.1.2/chai.min.js"></script>
<div id="mocha"></div>
JavaScript
f=(t,o=0)=>{setTimeout(()=>o=1,t*1000);return()=>o?'BOOM!':f(t)}
mocha.setup('bdd')
chai.should()
describe('f', () => {
it('returns function', () => {
foo = f(0.1)
chai.expect(typeof foo).to.equal('function')
})
it('returns BOOM! after timeout', done => {
foo = f(0.01)
setTimeout(()=>{foo().should.equal('BOOM!'); done()},11)
})
it('returns a function, which returns BOOM! after timeout', done => {
foo = f(0.02)
setTimeout(() => {
bar = foo()
setTimeout(() => {
foo().should.equal('BOOM!')
chai.expect(typeof bar()).to.equal('function')
}, 11)
setTimeout(() => {
bar().should.equal('BOOM!'); done()
}, 21)
}, 10)
})
it('returns a function, which returns a function, which returns BOOM! after timeout', done => {
foo = f(0.02)
setTimeout(() => {
bar = foo()
setTimeout(() => {
foo().should.equal('BOOM!')
chai.expect(typeof bar()).to.equal('function')
bar2 = bar()
setTimeout(() => {
foo().should.equal('BOOM!')
bar().should.equal('BOOM!')
chai.expect(typeof bar2()).to.equal('function')
}, 11)
setTimeout(() => {
bar2().should.equal('BOOM!'); done()
}, 21)
}, 11)
setTimeout(() => {
bar().should.equal('BOOM!');
}, 21)
}, 10)
})
})
mocha.run()