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)
  })
})

mocha.run()