Тест на флаттер - PullRequest
       22

Тест на флаттер

0 голосов
/ 11 апреля 2019

Я использую: https://pub.dartlang.org/packages/flutter_typeahead. Это мой код:

  @override
  Widget build(BuildContext context) {
    return BlocBuilder(bloc: _bloc, builder: (_, state) {
      if (state is TypeHeadSearchStateInitialized) {
        suggestions = [];
        state.value.forEach((element) => suggestions.add(element.name));
      }
      return TypeAheadFormField(
        textFieldConfiguration: TextFieldConfiguration(
          controller: _typeAheadController,
          decoration: InputDecoration(
              prefixIcon: _icon,
              hintText: _hintText),
        ),
        suggestionsCallback: (String pattern) async {
          return suggestions;
        },
        itemBuilder: (context, suggestion) {
          if (suggestions.isNotEmpty)
            return ListTile(
              title: Text(suggestion),
            );
        },
        onSuggestionSelected: (suggestion) {
          this._typeAheadController.text = suggestion;
        },
        hideOnEmpty: true,
      );
    });
  }

И это тест, который я делаю, чтобы проверить, будут ли отображаться предложения после того, как пользователь вставит что-то в textField:

  testWidgets('Should return a ListTile for suggestions', (WidgetTester tester) async {
    await _prepare(tester);

    when(_mockService.getAllSuggestions("Name")).thenAnswer((_) async => generateTestResults(1));

    await tester.enterText(find.byWidgetPredicate((Widget widget) => widget is TextField), "Name");
    await tester.pump();
    expect(find.byWidgetPredicate((Widget widget) => widget is ListTile), findsOneWidget);
  });

Блок работает нормально, я его отлаживаю и он входит в TypeHeadSearchStateInitialized, выполняя предложения с

state.value.forEach((element) => suggestions.add(element.name));

но затем сборка просто возвращает TypeAheadFormField, а не сборку предложений, и тест не пройден.

...