Skip to content

Commit 1ca796f

Browse files
committed
standardizing most tests around mockRerender
1 parent c338ed9 commit 1ca796f

File tree

2 files changed

+18
-37
lines changed

2 files changed

+18
-37
lines changed

src/LiveComponent/assets/test/controller/child.test.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,7 @@ describe('LiveController parent -> child component tests', () => {
109109
const { element, controller } = await startStimulus(parentTemplate(data));
110110

111111
// verify the child request contains the correct description & re-render
112-
fetchMock.get('http://localhost/_components/child?value=i+love+turtles', {
113-
html: childTemplate({ value: 'i love turtles' }),
114-
data: { value: 'i love turtles' }
115-
});
112+
mockRerender({ value: 'i love turtles' }, childTemplate);
116113

117114
// change the description in the child
118115
const inputElement = getByLabelText(element, 'Content:');
@@ -136,23 +133,18 @@ describe('LiveController parent -> child component tests', () => {
136133
const inputElement = getByLabelText(element, 'Content:');
137134
await userEvent.clear(inputElement);
138135
await userEvent.type(inputElement, 'changed content');
139-
fetchMock.get('http://localhost/_components/child?value=changed+content', {
140-
html: childTemplate({ value: 'changed content', rows: 5 }),
141-
data: { value: 'changed content', rows: 5 }
136+
mockRerender({'value': 'changed content'}, childTemplate, (data) => {
137+
data.rows = 5;
142138
});
143139

144140
// reload, which will give us rows=5
145141
getByText(element, 'Child Re-render').click();
146142
await waitFor(() => expect(element).toHaveTextContent('Rows in child: 5'));
147143

148144
// simulate an action in the parent component where "errors" changes
149-
const newData = {...data};
150-
newData.post.title = 'Changed title';
151-
newData.post.content = 'changed content';
152-
newData.errors = { post: { content: 'the content is not interesting enough' }};
153-
fetchMock.get('http://localhost/_components/parent?post%5Btitle%5D=Parent+component&post%5Bcontent%5D=changed+content', {
154-
html: parentTemplate(newData),
155-
data: newData
145+
mockRerender({'post': { title: 'Parent component', content: 'changed content' }}, parentTemplate, (data) => {
146+
data.post.title = 'Changed title';
147+
data.errors = { post: { content: 'the content is not interesting enough' }};
156148
});
157149

158150
getByText(element, 'Parent Re-render').click();
@@ -197,7 +189,4 @@ describe('LiveController parent -> child component tests', () => {
197189

198190
expect(controller.dataValue).toEqual({ textareaContent: 'changed content' });
199191
});
200-
201-
// TODO - what if a child component re-renders and comes down with
202-
// a changed set of data? Should that update the parent's data?
203192
});

src/LiveComponent/assets/test/controller/model.test.js

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
'use strict';
1111

1212
import { clearDOM } from '@symfony/stimulus-testing';
13-
import { initLiveComponent, startStimulus } from '../tools';
13+
import { initLiveComponent, mockRerender, startStimulus } from '../tools';
1414
import { getByLabelText, waitFor } from '@testing-library/dom';
1515
import userEvent from '@testing-library/user-event';
1616
import fetchMock from 'fetch-mock-jest';
@@ -114,9 +114,8 @@ describe('LiveController data-model Tests', () => {
114114
delete inputElement.dataset.model;
115115
inputElement.setAttribute('name', 'name');
116116

117-
fetchMock.getOnce('end:?name=Ryan+WEAVER', {
118-
html: template({ name: 'Ryan Weaver' }),
119-
data: { name: 'Ryan Weaver' }
117+
mockRerender({name: 'Ryan WEAVER'}, template, (data) => {
118+
data.name = 'Ryan Weaver';
120119
});
121120

122121
await userEvent.type(inputElement, ' WEAVER');
@@ -137,10 +136,9 @@ describe('LiveController data-model Tests', () => {
137136
inputElement.setAttribute('name', 'first_name');
138137

139138
// ?name should be what's sent to the server
140-
fetchMock.getOnce('end:?name=Ryan+WEAVER', {
141-
html: template({ name: 'Ryan Weaver' }),
142-
data: { name: 'Ryan Weaver' }
143-
});
139+
mockRerender({name: 'Ryan WEAVER'}, template, (data) => {
140+
data.name = 'Ryan Weaver';
141+
})
144142

145143
await userEvent.type(inputElement, ' WEAVER');
146144

@@ -172,9 +170,8 @@ describe('LiveController data-model Tests', () => {
172170
const inputElement = getByLabelText(element, 'First Name:');
173171

174172
const newData = { user: { firstName: 'Ryan Weaver' } };
175-
fetchMock.getOnce('end:?user%5BfirstName%5D=Ryan+WEAVER', {
176-
html: deeperModelTemplate(newData),
177-
data: newData
173+
mockRerender({'user': {firstName: 'Ryan WEAVER'}}, deeperModelTemplate, (data) => {
174+
data.user.firstName = 'Ryan Weaver';
178175
});
179176

180177
await userEvent.type(inputElement, ' WEAVER');
@@ -206,9 +203,8 @@ describe('LiveController data-model Tests', () => {
206203
const data = { firstName: 'Ryan' };
207204
const { element } = await startStimulus(parentUpdateTemplate(data));
208205

209-
fetchMock.getOnce('end:?firstName=Ryan+WEAVER', {
210-
html: parentUpdateTemplate({ firstName: 'Ryan Weaver' }),
211-
data: { firstName: 'Ryan Weaver' }
206+
mockRerender({firstName: 'Ryan WEAVER'}, parentUpdateTemplate, (data) => {
207+
data.firstName = 'Ryan Weaver';
212208
});
213209

214210
const inputElement = getByLabelText(element, 'Name:');
@@ -227,9 +223,8 @@ describe('LiveController data-model Tests', () => {
227223
const data = { name: 'Ryan', validatedFields: ['otherField'] };
228224
const { element } = await startStimulus(template(data));
229225

230-
fetchMock.getOnce('end:?name=Ryan+WEAVER&validatedFields%5B0%5D=otherField&validatedFields%5B1%5D=name', {
231-
html: template({ name: 'Ryan Weaver' }),
232-
data: { name: 'Ryan Weaver' }
226+
mockRerender({name: 'Ryan WEAVER', validatedFields: ['otherField', 'name']}, template, (data) => {
227+
data.name = 'Ryan Weaver';
233228
});
234229

235230
const inputElement = getByLabelText(element, 'Name:');
@@ -240,7 +235,4 @@ describe('LiveController data-model Tests', () => {
240235
// assert all calls were done the correct number of times
241236
fetchMock.done();
242237
});
243-
244-
// TODO - test changing debounce
245-
// TODO - test deferred rendering
246238
});

0 commit comments

Comments
 (0)