diff --git a/src/relative-time-element.ts b/src/relative-time-element.ts index a65d8c9..2a4d26e 100644 --- a/src/relative-time-element.ts +++ b/src/relative-time-element.ts @@ -39,7 +39,7 @@ const dateObserver = new (class { const time = Date.now() + ms if (time < this.time) { clearTimeout(this.timer) - this.timer = setTimeout(() => this.update, ms) + this.timer = setTimeout(() => this.update(), ms) this.time = time } } diff --git a/test/relative-time.js b/test/relative-time.js index 0573b2f..9449aa9 100644 --- a/test/relative-time.js +++ b/test/relative-time.js @@ -58,6 +58,19 @@ suite('relative-time', function () { assert.equal(counter, 1) }) + test('updates the time automatically when it is a few seconds ago', async function () { + // eslint-disable-next-line @typescript-eslint/no-invalid-this + this.timeout(3000) + const el = document.createElement('relative-time') + el.setAttribute('datetime', new Date(Date.now() + 25000).toISOString()) + const display = el.shadowRoot?.textContent || el.textContent + assert.match(display, /in \d+ seconds/) + await new Promise(resolve => setTimeout(resolve, 2000)) + const nextDisplay = el.shadowRoot.textContent || el.textContent + assert.match(nextDisplay, /in \d+ seconds/) + assert.notEqual(nextDisplay, display) + }) + test("doesn't error when no date is provided", function () { const element = document.createElement('relative-time') assert.doesNotThrow(() => element.attributeChangedCallback('datetime', null, null))