Skip to content

Commit 0a62458

Browse files
committed
Wait for initial element query attributes in tests, fixes #35
1 parent 7b5dcd7 commit 0a62458

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

addon/-private/modifier.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
SIZES_HEIGHT_DEFAULT,
1212
} from 'ember-element-query';
1313
import { inject as service } from '@ember/service';
14+
import { waitFor } from '@ember/test-waiters';
1415
export interface SizeObject {
1516
name: string;
1617
value: number;
@@ -41,6 +42,7 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
4142
sizesRatioDefault: Sizes = SIZES_RATIO_DEFAULT;
4243

4344
_element?: HTMLElement; // For some reason, this.element is not always available
45+
_promiseResolveHasBeenInstalled?: (value?: unknown) => void;
4446

4547
// -------------------
4648
// Computed properties
@@ -541,11 +543,19 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
541543
: sizeObjectsSortedAsc[sizeObjectsSortedAsc.length - 1];
542544
}
543545

546+
_maybeRunPromiseResolveHasBeenInstalled(): void {
547+
if (this._promiseResolveHasBeenInstalled) {
548+
this._promiseResolveHasBeenInstalled();
549+
this._promiseResolveHasBeenInstalled = undefined;
550+
}
551+
}
552+
544553
_didResizeHandler(): void {
545554
window.requestAnimationFrame(() => {
546555
if (!this.args.named.isDisabled && !this.isDestroying && !this.isDestroyed) {
547556
this.applyAttributesToElement();
548557
this.callOnResize();
558+
this._maybeRunPromiseResolveHasBeenInstalled();
549559
}
550560
});
551561
}
@@ -561,13 +571,19 @@ export default class ElementQueryModifier extends Modifier<ModifierArgs> {
561571
// -------------------
562572
// Lifecycle hooks
563573
// -------------------
564-
565-
didInstall(): void {
574+
@waitFor
575+
didInstall(): void | Promise<void> {
566576
if (!this.element) throw new Error('Expected this.element to be available');
567577

568578
this._element = this.element;
569579

570580
this.resizeObserver.observe(this.element, this.didResizeHandler); // eslint-disable-line @typescript-eslint/unbound-method
581+
582+
if (!this.args.named.isDisabled) {
583+
return new Promise((resolve) => {
584+
this._promiseResolveHasBeenInstalled = resolve;
585+
});
586+
}
571587
}
572588

573589
didUpdateArguments(): void {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
}
6868
},
6969
"dependencies": {
70+
"@ember/test-waiters": "^3.0.0",
7071
"ember-cli-babel": "^7.26.3",
7172
"ember-cli-htmlbars": "5.7.1",
7273
"ember-cli-typescript": "^4.2.1",

yarn.lock

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,6 +1826,16 @@
18261826
ember-cli-version-checker "^5.1.2"
18271827
semver "^7.3.2"
18281828

1829+
"@ember/test-waiters@^3.0.0":
1830+
version "3.0.0"
1831+
resolved "https://registry.yarnpkg.com/@ember/test-waiters/-/test-waiters-3.0.0.tgz#b66a35cd5b78ec3c296a6f5f5fb3852780a5d3c8"
1832+
integrity sha512-z6+gIlq/rXLKroWv2wxAoiiLtgSOGQFCw6nUufERausV+jLnA7CYbWwzEo5R7XaOejSDpgA5d6haXIBsD5j0oQ==
1833+
dependencies:
1834+
calculate-cache-key-for-tree "^2.0.0"
1835+
ember-cli-babel "^7.26.6"
1836+
ember-cli-version-checker "^5.1.2"
1837+
semver "^7.3.5"
1838+
18291839
"@embroider/core@0.33.0", "@embroider/core@^0.33.0":
18301840
version "0.33.0"
18311841
resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.33.0.tgz#0fb1752d6e34ea45368e65c42e13220a57ffae76"

0 commit comments

Comments
 (0)