Skip to content

Commit 3eb2ec1

Browse files
committed
attempt at making a test
1 parent f48759c commit 3eb2ec1

File tree

1 file changed

+42
-20
lines changed

1 file changed

+42
-20
lines changed

tests/test-app/tests/utils/debounce/js-test.ts

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,62 @@ import { debounce } from 'reactiveweb/debounce';
99
module('Utils | debounce | js', function (hooks) {
1010
setupTest(hooks);
1111

12-
let someTime = (ms = 25) => new Promise((resolve) => setTimeout(resolve, ms));
12+
const timeout = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
1313

1414
module('debounce', function () {
15-
test('works with @use', async function (assert) {
15+
test('value is returned after x ms', async function (assert) {
1616
class Test {
17-
@tracked data = '';
17+
@tracked value = 'initial';
1818

19-
@use text = debounce(100, () => this.data);
19+
@use debouncedValue = debounce(100, () => this.value);
2020
}
2121

2222
let test = new Test();
2323

2424
setOwner(test, this.owner);
2525

26-
assert.strictEqual(test.text, undefined);
26+
assert.strictEqual(test.debouncedValue, undefined, 'Value is undefined at first');
2727

28-
test.data = 'b';
29-
await someTime();
30-
assert.strictEqual(test.text, undefined);
31-
test.data = 'bo';
32-
await someTime();
33-
assert.strictEqual(test.text, undefined);
34-
test.data = 'boo';
35-
await someTime();
36-
assert.strictEqual(test.text, undefined);
28+
await timeout(50);
3729

38-
await someTime(110);
39-
assert.strictEqual(test.text, 'boo');
30+
assert.strictEqual(test.debouncedValue, undefined, 'Value is still undefined after ~50ms');
4031

41-
test.data = 'boop';
42-
assert.strictEqual(test.text, 'boo');
32+
await timeout(50);
4333

44-
await someTime(110);
45-
assert.strictEqual(test.text, 'boop');
34+
assert.strictEqual(test.debouncedValue, test.value, `Value is "${test.debouncedValue}" after ~100ms`);
35+
});
36+
37+
test('value is returned x ms after latest change', async function (assert) {
38+
class Test {
39+
@tracked value = 'initial';
40+
41+
@use debouncedValue = debounce(100, () => this.value);
42+
}
43+
44+
let test = new Test();
45+
46+
setOwner(test, this.owner);
47+
48+
assert.strictEqual(test.debouncedValue, undefined, 'Value is undefined at first');
49+
50+
await timeout(50);
51+
52+
assert.strictEqual(test.debouncedValue, undefined, 'Value is still undefined after ~50ms');
53+
54+
// Changing the value resets the debounce timer
55+
test.value = 'new';
56+
57+
await timeout(50);
58+
59+
assert.strictEqual(test.debouncedValue, undefined, `Value is still undefined after ~100ms (because we changed something at ~50ms)`);
60+
61+
await timeout(50);
62+
63+
assert.strictEqual(test.debouncedValue, test.value, `Value is "${test.value}" after ~150ms`);
64+
65+
await timeout(50);
66+
67+
assert.strictEqual(test.debouncedValue, test.value, `Value is "${test.value}" after ~200ms`);
4668
});
4769
});
4870
});

0 commit comments

Comments
 (0)