Skip to content

Commit e115eef

Browse files
committed
Wait for nextTick after emitting an event
1 parent 805167c commit e115eef

16 files changed

+65
-24
lines changed

tests/unit/components/AdjustableSidebarWidth.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ describe('AdjustableSidebarWidth', () => {
282282
expect(wrapper.emitted('update:shownOnMobile')).toBeFalsy();
283283
// true test
284284
wrapper.findComponent(BreakpointEmitter).vm.$emit('change', BreakpointName.large);
285+
await wrapper.vm.$nextTick();
285286
expect(wrapper.emitted('update:shownOnMobile')).toEqual([[false]]);
286287
});
287288
});

tests/unit/components/Asset.spec.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ describe('Asset', () => {
8080
expect(imageAsset.props('variants')).toBe(foo.variants);
8181
});
8282

83-
it('renders a `ReplayableVideoAsset` for video', () => {
83+
it('renders a `ReplayableVideoAsset` for video', async () => {
8484
const image = {
8585
type: 'image',
8686
variants: [
@@ -100,6 +100,7 @@ describe('Asset', () => {
100100

101101
// Check that 'ended' events emitted by a `VideoAsset` are re-emitted.
102102
videoAsset.vm.$emit('ended');
103+
await wrapper.vm.$nextTick();
103104
expect(wrapper.emitted().videoEnded[0]).toBeTruthy();
104105
});
105106

tests/unit/components/ContentNode/CodeListing.spec.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { flushPromises } from '../../../../test-utils';
1515
describe('CodeListing', () => {
1616
const { Filename } = CodeListing.components;
1717

18-
it('renders the file name if provided', () => {
18+
it('renders the file name if provided', async () => {
1919
const fileName = 'myfile';
2020
const isFileNameActionable = true;
2121

@@ -37,6 +37,7 @@ describe('CodeListing', () => {
3737

3838
// Test that an event is emitted when the file name is clicked.
3939
fileNameComponent.vm.$emit('click');
40+
await wrapper.vm.$nextTick();
4041
expect(wrapper.emitted()['file-name-click']).toBeTruthy();
4142
});
4243

tests/unit/components/ContentNode/EndpointExample.spec.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,9 @@ describe('EndpointExample', () => {
7575
expect(codeListing.props('collapsed')).toBe(true);
7676
});
7777

78-
it('toggles the current tab when selected', () => {
78+
it('toggles the current tab when selected', async () => {
7979
wrapper.findComponent(Tabnav).vm.$emit('input', Tab.response);
80+
await wrapper.vm.$nextTick();
8081
const codeListing = wrapper.findComponent(CollapsibleCodeListing);
8182
expect(codeListing.props('content')).toBe(propsData.response.content);
8283
});
@@ -88,6 +89,7 @@ describe('EndpointExample', () => {
8889
it('expands/collapses the CollapsibleCodeListing when the more/less toggle is clicked', async () => {
8990
// show the response, as it is collapsible
9091
wrapper.findComponent(Tabnav).vm.$emit('input', Tab.response);
92+
await wrapper.vm.$nextTick();
9193

9294
const codeListing = wrapper.findComponent(CollapsibleCodeListing);
9395

tests/unit/components/ContentNode/MobileCodeListing.spec.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ describe('MobileCodeListing', () => {
2929
expect(codeListing.props('isFileNameActionable')).toBe(true);
3030
});
3131

32-
it('re-emits `file-name-click` events', () => {
32+
it('re-emits `file-name-click` events', async () => {
3333
const wrapper = mountWithHighlights([{ line: 1 }]);
3434
const codeListing = wrapper.findComponent(CodeListing);
3535

3636
codeListing.vm.$emit('file-name-click');
37+
await wrapper.vm.$nextTick();
3738
expect(wrapper.emitted()['file-name-click']).toBeTruthy();
3839
});
3940

tests/unit/components/ContentNode/TabNavigator.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ describe('TabNavigator.spec', () => {
7878
await flushPromises();
7979
const tabnav = wrapper.findComponent(Tabnav);
8080
tabnav.vm.$emit('input', titles[1]);
81+
await wrapper.vm.$nextTick();
8182
expect(wrapper.findComponent('.tab-container.active').text()).toBe('Second');
8283
expect(tabnav.props('value')).toEqual(titles[1]);
8384
});

tests/unit/components/DocumentationLayout.spec.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ describe('DocumentationLayout', () => {
474474
await flushPromises();
475475
sidebar.vm.breakpoint = BreakpointName.medium;
476476
navigator.vm.$emit('close');
477+
await wrapper.vm.$nextTick();
477478
expect(sidebar.props('shownOnMobile')).toBe(false);
478479
expect(storage.set).toHaveBeenCalledTimes(0);
479480
});
@@ -510,10 +511,12 @@ describe('DocumentationLayout', () => {
510511
expect(sidebar.props('hiddenOnLarge')).toBe(false);
511512
// Now close from the sidebar
512513
sidebar.vm.$emit('update:hiddenOnLarge', true);
514+
await wrapper.vm.$nextTick();
513515
expect(sidebar.props('hiddenOnLarge')).toBe(true);
514516
expect(storage.set).toHaveBeenLastCalledWith(NAVIGATOR_HIDDEN_ON_LARGE_KEY, true);
515517
// now toggle it back, from within the Nav button
516518
nav.vm.$emit('toggle-sidenav', BreakpointName.large);
519+
await wrapper.vm.$nextTick();
517520
// assert we are storing the updated values
518521
expect(sidebar.props('hiddenOnLarge')).toBe(false);
519522
expect(storage.set).toHaveBeenLastCalledWith(NAVIGATOR_HIDDEN_ON_LARGE_KEY, false);

tests/unit/components/DocumentationTopic/Summary/LanguageSwitcher.spec.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ describe('LanguageSwitcher', () => {
128128
expect(links.at(1).props('url')).toBe('/documentation/foo?language=objc');
129129
});
130130

131-
it('stores the preferred language when a link is clicked', () => {
131+
it('stores the preferred language when a link is clicked', async () => {
132132
const store = { setPreferredLanguage: jest.fn() };
133133
wrapper = shallowMount(LanguageSwitcher, {
134134
mocks,
@@ -138,6 +138,7 @@ describe('LanguageSwitcher', () => {
138138

139139
let link = wrapper.findAllComponents(LanguageSwitcherLink).at(1);
140140
link.vm.$emit('click');
141+
await wrapper.vm.$nextTick();
141142
expect(store.setPreferredLanguage).toBeCalledWith(Language.objectiveC.key.url);
142143

143144
link = wrapper.findAllComponents(LanguageSwitcherLink).at(0);

tests/unit/components/Filter/FilterInput.spec.js

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,7 @@ describe('FilterInput', () => {
470470
const selectedTags = wrapper.findComponent({ ref: 'selectedTags' });
471471
if (selectedTags.exists()) {
472472
selectedTags.vm.$emit('select-all');
473+
await wrapper.vm.$nextTick();
473474
}
474475

475476
input.trigger('paste', { clipboardData });
@@ -709,10 +710,11 @@ describe('FilterInput', () => {
709710
});
710711
});
711712

712-
it('adds tag to `selectedTags` when it is clicked, clearing the filter', () => {
713+
it('adds tag to `selectedTags` when it is clicked, clearing the filter', async () => {
713714
const selectedTag = 'Tag1';
714715
suggestedTags = wrapper.findComponent({ ref: 'suggestedTags' });
715716
suggestedTags.vm.$emit('click-tags', { tagName: selectedTag });
717+
await wrapper.vm.$nextTick();
716718
expect(wrapper.emitted('update:selectedTags')).toEqual([[[selectedTag]]]);
717719
expect(wrapper.emitted('input')).toEqual([['']]);
718720
});
@@ -742,8 +744,9 @@ describe('FilterInput', () => {
742744
expect(attrs).toHaveProperty('aria-labelledby', 'filter-input selected-tags');
743745
});
744746

745-
it('re-emits the the `preventedBlur` event, from selected tags', () => {
747+
it('re-emits the the `preventedBlur` event, from selected tags', async () => {
746748
selectedTagsComponent.vm.$emit('prevent-blur');
749+
await wrapper.vm.$nextTick();
747750
expect(wrapper.emitted('update:preventedBlur')).toEqual([[true]]);
748751
});
749752

@@ -854,6 +857,7 @@ describe('FilterInput', () => {
854857

855858
it('reset filters when `reset-filters` event is called on `selectedTags`', async () => {
856859
selectedTagsComponent.vm.$emit('reset-filters');
860+
await wrapper.vm.$nextTick();
857861

858862
expect(wrapper.emitted('input')).toEqual([['']]);
859863
expect(wrapper.emitted('update:selectedTags')).toBeTruthy();
@@ -938,9 +942,10 @@ describe('FilterInput', () => {
938942
expect(wrapper.emitted('update:selectedTags')).toBeTruthy();
939943
});
940944

941-
it('focuses the input and does not delete selected tag when it is clicked on desktop', () => {
945+
it('focuses the input and does not delete selected tag when it is clicked on desktop', async () => {
942946
const selectedTags = wrapper.findComponent({ ref: 'selectedTags' });
943947
selectedTags.vm.$emit('click-tags', selectedTag);
948+
await wrapper.vm.$nextTick();
944949
expect(wrapper.vm.selectedTags).toEqual([selectedTag]);
945950
expect(document.activeElement).toBe(input.element);
946951
});
@@ -1030,6 +1035,7 @@ describe('FilterInput', () => {
10301035
const singleCharacter = 'a';
10311036

10321037
wrapper.findComponent({ ref: 'selectedTags' }).vm.$emit('select-all');
1038+
await wrapper.vm.$nextTick();
10331039
input.trigger('keydown', { key: singleCharacter });
10341040
input.setValue(singleCharacter);
10351041

@@ -1091,6 +1097,7 @@ describe('FilterInput', () => {
10911097
await wrapper.setProps({ value: 'foo', selectedTags: tags });
10921098
const selectedTags = wrapper.findComponent({ ref: 'selectedTags' });
10931099
selectedTags.vm.$emit('select-all');
1100+
await wrapper.vm.$nextTick();
10941101

10951102
expect(wrapper.vm.selectedTag).toEqual(wrapper.vm.activeTag);
10961103
});
@@ -1193,8 +1200,9 @@ describe('FilterInput', () => {
11931200
expect(wrapper.emitted('focus-prev')).toBeTruthy();
11941201
});
11951202

1196-
it('emits `focus-next`, when @focus-next is called from SuggestedTags', () => {
1203+
it('emits `focus-next`, when @focus-next is called from SuggestedTags', async () => {
11971204
wrapper.findComponent({ ref: 'suggestedTags' }).vm.$emit('focus-next');
1205+
await wrapper.vm.$nextTick();
11981206
expect(wrapper.emitted('focus-next')).toHaveLength(1);
11991207
});
12001208

@@ -1211,6 +1219,7 @@ describe('FilterInput', () => {
12111219
await wrapper.setProps({ positionReversed: true });
12121220

12131221
wrapper.findComponent({ ref: 'suggestedTags' }).vm.$emit('focus-prev');
1222+
await wrapper.vm.$nextTick();
12141223
expect(wrapper.emitted('focus-prev')).toHaveLength(1);
12151224
});
12161225

@@ -1316,7 +1325,7 @@ describe('FilterInput', () => {
13161325
input.trigger('keydown.left', { shiftKey: true });
13171326
});
13181327

1319-
it('selects tags from right to left', () => {
1328+
it('selects tags from right to left', async () => {
13201329
// Last tag should get active
13211330
expect(wrapper.vm.activeTags).toEqual([selectedTags[2]]);
13221331

@@ -1328,18 +1337,20 @@ describe('FilterInput', () => {
13281337

13291338
// Previous tag get focus
13301339
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[1] });
1340+
await wrapper.vm.$nextTick();
13311341

13321342
// Last two tags get active
13331343
expect(wrapper.vm.activeTags).toEqual([selectedTags[1], selectedTags[2]]);
13341344
});
13351345

1336-
it('unselects tags from left to right', () => {
1346+
it('unselects tags from left to right', async () => {
13371347
// Press left key + shift on the last tag
13381348
selectedTagsComponent.vm.$emit('keydown', {
13391349
tagName: selectedTags[2],
13401350
event: new KeyboardEvent('keydown.left', { shiftKey: true }),
13411351
});
13421352
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[1] });
1353+
await wrapper.vm.$nextTick();
13431354

13441355
// Last two tags get active
13451356
expect(wrapper.vm.activeTags).toEqual([selectedTags[1], selectedTags[2]]);
@@ -1351,18 +1362,20 @@ describe('FilterInput', () => {
13511362
});
13521363
// Last tag get focus
13531364
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[2] });
1365+
await wrapper.vm.$nextTick();
13541366

13551367
// Only the last tag get active
13561368
expect(wrapper.vm.activeTags).toEqual([selectedTags[2]]);
13571369
});
13581370

1359-
it('unselects tags clicking on them using the meta key', () => {
1371+
it('unselects tags clicking on them using the meta key', async () => {
13601372
// Press left key + shift on the last tag
13611373
selectedTagsComponent.vm.$emit('keydown', {
13621374
tagName: selectedTags[2],
13631375
event: new KeyboardEvent('keydown.left', { shiftKey: true }),
13641376
});
13651377
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[1] });
1378+
await wrapper.vm.$nextTick();
13661379

13671380
// Last two tags get active
13681381
expect(wrapper.vm.activeTags).toEqual([selectedTags[1], selectedTags[2]]);
@@ -1377,13 +1390,14 @@ describe('FilterInput', () => {
13771390
expect(spyFocusTag).toHaveBeenCalledTimes(1);
13781391
});
13791392

1380-
it('unselects tags clicking on them using the ctrl key', () => {
1393+
it('unselects tags clicking on them using the ctrl key', async () => {
13811394
// Press left key + shift on the last tag
13821395
selectedTagsComponent.vm.$emit('keydown', {
13831396
tagName: selectedTags[2],
13841397
event: new KeyboardEvent('keydown.left', { shiftKey: true }),
13851398
});
13861399
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[1] });
1400+
await wrapper.vm.$nextTick();
13871401

13881402
// Last two tags get active
13891403
expect(wrapper.vm.activeTags).toEqual([selectedTags[1], selectedTags[2]]);
@@ -1398,11 +1412,12 @@ describe('FilterInput', () => {
13981412
expect(spyFocusTag).toHaveBeenCalledTimes(1);
13991413
});
14001414

1401-
it('does not select tags if user tabs while holding the shift key from input', () => {
1415+
it('does not select tags if user tabs while holding the shift key from input', async () => {
14021416
input.trigger('keydown', { key: 'Tab', shiftKey: true });
14031417
expect(wrapper.vm.activeTags).toEqual([]);
14041418

14051419
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[2] });
1420+
await wrapper.vm.$nextTick();
14061421
expect(wrapper.vm.activeTags).toEqual([]);
14071422
});
14081423
});
@@ -1417,12 +1432,13 @@ describe('FilterInput', () => {
14171432
spyFocusTag = jest.spyOn(selectedTagsComponent.vm, 'focusTag').mockReturnValueOnce();
14181433
});
14191434

1420-
it('selects the whole range between the init tag index and the focused tag index from right to left', () => {
1435+
it('selects the whole range between the init tag index and the focused tag index from right to left', async () => {
14211436
selectedTagsComponent.vm.$emit('keydown', {
14221437
tagName: selectedTags[2],
14231438
event: new KeyboardEvent('keydown', { shiftKey: true }),
14241439
});
14251440
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[0] });
1441+
await wrapper.vm.$nextTick();
14261442

14271443
expect(wrapper.vm.activeTags).toEqual(selectedTags);
14281444
});
@@ -1553,7 +1569,7 @@ describe('FilterInput', () => {
15531569
expect(wrapper.vm.activeTags).toEqual([selectedTags[1], selectedTags[0]]);
15541570
});
15551571

1556-
it('selects the init tag as the length of selected tags when the selection starts on the input value', () => {
1572+
it('selects the init tag as the length of selected tags when the selection starts on the input value', async () => {
15571573
input = wrapper.findComponent('input');
15581574
input.trigger('keydown.left', {
15591575
shiftKey: true,
@@ -1563,6 +1579,7 @@ describe('FilterInput', () => {
15631579
expect(wrapper.vm.activeTags).toEqual([selectedTags[selectedTags.length - 1]]);
15641580

15651581
selectedTagsComponent.vm.$emit('focus', { tagName: selectedTags[0] });
1582+
await wrapper.vm.$nextTick();
15661583

15671584
expect(wrapper.vm.activeTags).toEqual(selectedTags);
15681585
});

tests/unit/components/Filter/TagList.spec.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ describe('TagList', () => {
4747
expect(list.classes('scrolling')).toBe(true);
4848
});
4949

50-
it('re-emits `prevent-blur` when tag emitted `prevent-blur`', () => {
50+
it('re-emits `prevent-blur` when tag emitted `prevent-blur`', async () => {
5151
tag1.vm.$emit('prevent-blur');
52+
await wrapper.vm.$nextTick();
5253

5354
expect(wrapper.emitted('prevent-blur')).toBeTruthy();
5455
});
@@ -186,10 +187,11 @@ describe('TagList', () => {
186187
expect(wrapper.emitted('select-all')).toBeTruthy();
187188
});
188189

189-
it('emits up `paste-tags`, when a tag emits a `paste-content` event', () => {
190+
it('emits up `paste-tags`, when a tag emits a `paste-content` event', async () => {
190191
const tag = wrapper.findComponent({ ref: 'tag' });
191192
const payload = { someData: 'someData' };
192193
tag.vm.$emit('paste-content', payload);
194+
await wrapper.vm.$nextTick();
193195
// assert its emitted only once
194196
expect(wrapper.emitted('paste-tags')).toHaveLength(1);
195197
// assert it passes up the event payload up

0 commit comments

Comments
 (0)