Skip to content

Commit ef5e190

Browse files
committed
refactor(form-field/testing): deprecate methods that return TestElement
In general we want to avoid exposing `TestElement` instances in the public harness API. These changes mark `getHarnessLoaderForSuffix` and `getHarnessLoaderForPrefix` as deprecated since they don't do what their names say and they're exposing a `TestElement`. I've added replacements that return the text of the elements since that's what appears to be the main use case.
1 parent 36d4c5d commit ef5e190

File tree

4 files changed

+40
-10
lines changed

4 files changed

+40
-10
lines changed

src/material-experimental/mdc-form-field/testing/form-field-harness.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,19 +160,35 @@ export class MatFormFieldHarness extends ComponentHarness {
160160
/**
161161
* Gets a reference to the container element which contains all projected
162162
* prefixes of the form-field.
163+
* @deprecated Use `getPrefixText` instead.
164+
* @breaking-change 11.0.0
163165
*/
164166
async getHarnessLoaderForPrefix(): Promise<TestElement|null> {
165167
return this._prefixContainer();
166168
}
167169

170+
/** Gets the text inside the prefix element. */
171+
async getPrefixText(): Promise<string> {
172+
const prefix = await this._prefixContainer();
173+
return prefix ? prefix.text() : '';
174+
}
175+
168176
/**
169177
* Gets a reference to the container element which contains all projected
170178
* suffixes of the form-field.
179+
* @deprecated Use `getSuffixText` instead.
180+
* @breaking-change 11.0.0
171181
*/
172182
async getHarnessLoaderForSuffix(): Promise<TestElement|null> {
173183
return this._suffixContainer();
174184
}
175185

186+
/** Gets the text inside the suffix element. */
187+
async getSuffixText(): Promise<string> {
188+
const suffix = await this._suffixContainer();
189+
return suffix ? suffix.text() : '';
190+
}
191+
176192
/**
177193
* Whether the form control has been touched. Returns "null"
178194
* if no form control is set up.

src/material/form-field/testing/form-field-harness.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,19 +165,35 @@ export class MatFormFieldHarness extends ComponentHarness {
165165
/**
166166
* Gets a reference to the container element which contains all projected
167167
* prefixes of the form-field.
168+
* @deprecated Use `getPrefixText` instead.
169+
* @breaking-change 11.0.0
168170
*/
169171
async getHarnessLoaderForPrefix(): Promise<TestElement|null> {
170172
return this._prefixContainer();
171173
}
172174

175+
/** Gets the text inside the prefix element. */
176+
async getPrefixText(): Promise<string> {
177+
const prefix = await this._prefixContainer();
178+
return prefix ? prefix.text() : '';
179+
}
180+
173181
/**
174182
* Gets a reference to the container element which contains all projected
175183
* suffixes of the form-field.
184+
* @deprecated Use `getSuffixText` instead.
185+
* @breaking-change 11.0.0
176186
*/
177187
async getHarnessLoaderForSuffix(): Promise<TestElement|null> {
178188
return this._suffixContainer();
179189
}
180190

191+
/** Gets the text inside the suffix element. */
192+
async getSuffixText(): Promise<string> {
193+
const suffix = await this._suffixContainer();
194+
return suffix ? suffix.text() : '';
195+
}
196+
181197
/**
182198
* Whether the form control has been touched. Returns "null"
183199
* if no form control is set up.

src/material/form-field/testing/shared.spec.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -188,20 +188,16 @@ export function runHarnessTests(
188188
expect(await formFields[1].getTextHints()).toEqual([]);
189189
});
190190

191-
it('should be able to get prefix container of form-field', async () => {
191+
it('should be able to get the prefix text of a form-field', async () => {
192192
const formFields = await loader.getAllHarnesses(formFieldHarness);
193-
const prefixContainers = await Promise.all(formFields.map(f => f.getHarnessLoaderForPrefix()));
194-
expect(prefixContainers[0]).not.toBe(null);
195-
expect(await prefixContainers[0]!.text()).toBe('prefix_textprefix_text_2');
196-
expect(prefixContainers[1]).toBe(null);
193+
const prefixTexts = await Promise.all(formFields.map(f => f.getPrefixText()));
194+
expect(prefixTexts).toEqual(['prefix_textprefix_text_2', '', '', '', '']);
197195
});
198196

199-
it('should be able to get suffix container of form-field', async () => {
197+
it('should be able to get the suffix text of a form-field', async () => {
200198
const formFields = await loader.getAllHarnesses(formFieldHarness);
201-
const suffixContainer = await Promise.all(formFields.map(f => f.getHarnessLoaderForSuffix()));
202-
expect(suffixContainer[0]).not.toBe(null);
203-
expect(await suffixContainer[0]!.text()).toBe('suffix_text');
204-
expect(suffixContainer[1]).toBe(null);
199+
const suffixTexts = await Promise.all(formFields.map(f => f.getSuffixText()));
200+
expect(suffixTexts).toEqual(['suffix_text', '', '', '', '']);
205201
});
206202

207203
it('should be able to check if form field has been touched', async () => {

tools/public_api_guard/material/form-field/testing.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ export declare class MatFormFieldHarness extends ComponentHarness {
1313
getHarnessLoaderForPrefix(): Promise<TestElement | null>;
1414
getHarnessLoaderForSuffix(): Promise<TestElement | null>;
1515
getLabel(): Promise<string | null>;
16+
getPrefixText(): Promise<string>;
17+
getSuffixText(): Promise<string>;
1618
getTextErrors(): Promise<string[]>;
1719
getTextHints(): Promise<string[]>;
1820
getThemeColor(): Promise<'primary' | 'accent' | 'warn'>;

0 commit comments

Comments
 (0)