테스트 환경에서 위젯을 찾으려면 Finder 클래스를 사용하라. 자체 Finder 클래스를 작성할 수 있지만 일반적으로 flutter_test 패키지에서 제공하는 도구를 사용하여 위젯을 찾는 것이 더 편리하다.
위젯 테스트에서 flutter run 세션을 수행하는 동안 Flutter 도구에 대한 화면 일부를 대화형으로 탭하여 제안된 Finder를 인쇄할 수 있다.
이 레시피는 flutter_test 패키지에서 제공하는 find 상수를 살펴보고 제공하는 일부 Finders로 작업하는 방법을 보여준다. 사용 가능한 finder의 전체 목록은 CommonFinders설명서를 참조하라.
위젯 테스트 및 Finder 클래스의 역할에 익숙하지 않은 경우, 소개 위젯 테스트 레시피를 검토하라.
이 레시피는 다음 단계를 사용한다.
1. Text 위젯 찾기
2. 특정 Key로 위젯 찾기
3. 특정 위젯 인스턴스 찾기
테스트에서 종종 특정 텍스트가 포함된 위젯을 찾아야 한다. 이것이 바로 find.text()의 목적이다. 텍스트의 특정 String을 표시하는 위젯을 검색하는 Finder를 생성한다.
testWidgets('finds a Text widget', (tester) async {
// Build an App with a Text widget that displays the letter 'H'.
await tester.pumpWidget(const MaterialApp(
home: Scaffold(
body: Text('H'),
),
));
// Find a widget that displays the letter 'H'.
expect(find.text('H'), findsOneWidget);
});
경우에 따라 제공된 키를 기반으로 위젯을 찾고자 할 것이다. 동일한 위젯의 여러 인스턴스를 표시하는 경우 유용할 것이다. 예를 들어, ListView는 동일한 텍스트를 포함하는 여러 Text 위젯을 표시할 수 있다.
이 경우 목록의 각 위젯에 Key를 제공하라. 이렇게 하면 앱이 특정 위젯을 고유하게 식별할 수 있으므로 테스트 환경에서 위젯을 더 쉽게 찾을 수 있다.
testWidgets('finds a widget using a Key', (tester) async {
// Define the test key.
const testKey = Key('K');
// Build a MaterialApp with the testKey.
await tester.pumpWidget(MaterialApp(key: testKey, home: Container()));
// Find the MaterialApp widget using the testKey.
expect(find.byKey(testKey), findsOneWidget);
});
마지막으로 위젯의 특정 인스턴스를 찾는 데 관심이 있을 수 있다. 예를 들어 child 속성을 사용하는 위젯을 만들고 child 위젯을 렌더링하고 있는지 확인하려는 경우에 유용할 것이다.
testWidgets('finds a specific instance', (tester) async {
const childWidget = Padding(padding: EdgeInsets.zero);
// Provide the childWidget to the Container.
await tester.pumpWidget(Container(child: childWidget));
// Search for the childWidget in the tree and verify it exists.
expect(find.byWidget(childWidget), findsOneWidget);
});
flutter_test 패키지에서 제공하는 find 상수는 테스트 환경에서 위젯을 찾는 여러 가지 방법을 제공한다. 이 레시피는 이러한 방법 중 세 가지를 보여 주며 다른 목적을 위한 몇 가지 방법이 더 있다.
위의 예가 특정 사용 사례에 대해 작동하지 않는 경우 CommonFinders 설명서를 참조하여 사용 가능한 모든 방법을 검토하라.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('finds a Text widget', (tester) async {
// Build an App with a Text widget that displays the letter 'H'.
await tester.pumpWidget(const MaterialApp(
home: Scaffold(
body: Text('H'),
),
));
// Find a widget that displays the letter 'H'.
expect(find.text('H'), findsOneWidget);
});
testWidgets('finds a widget using a Key', (tester) async {
// Define the test key.
const testKey = Key('K');
// Build a MaterialApp with the testKey.
await tester.pumpWidget(MaterialApp(key: testKey, home: Container()));
// Find the MaterialApp widget using the testKey.
expect(find.byKey(testKey), findsOneWidget);
});
testWidgets('finds a specific instance', (tester) async {
const childWidget = Padding(padding: EdgeInsets.zero);
// Provide the childWidget to the Container.
await tester.pumpWidget(Container(child: childWidget));
// Search for the childWidget in the tree and verify it exists.
expect(find.byWidget(childWidget), findsOneWidget);
});
}