Тестирование локализованных строк в Flutter - PullRequest
0 голосов
/ 29 ноября 2018

Когда я пытаюсь протестировать Widget, который содержит

 hintText: LocalizationResources.of(context).writecomment

, я получаю исключение, говорящее:

The following NoSuchMethodError was thrown building CommentInput(dirty, state:
_CommentInputState#32224):
The getter 'writecomment' was called on null.

Итак, я что-то упускаю?Виджет прекрасно работает на устройстве и симуляторе.

Вот так выглядит мой тест:

....
 final Widget widget =
        MaterialApp(home: CommentWallWidget(channelUid: '123456'), title: 'jelena',);

    await tester.pumpWidget(widget);

А LocalizationResources просто прост: l10n:

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

import 'l10n/messages_all.dart';

///class containing localization logic and string getters
class LocalizationResources {
  static Future<LocalizationResources> load(Locale locale) {
    final String name =
        locale.countryCode.isEmpty ? locale.languageCode : locale.toString();
    final String localeName = Intl.canonicalizedLocale(name);

    return initializeMessages(localeName).then((_) {
      Intl.defaultLocale = localeName;
      return LocalizationResources();
    });
  }

  static LocalizationResources of(BuildContext context) {
    return Localizations.of<LocalizationResources>(
        context, LocalizationResources);
  }
....

1 Ответ

0 голосов
/ 02 декабря 2018

Вам нужно обернуть свой тестовый виджет в виджет MediaQuery и предоставить свой делегат локализации.Для получения дополнительной информации см. здесь .

final Widget widget = MediaQuery(
  data: MediaQueryData(),
  child: MaterialApp(
    localizationsDelegates: [LocalizationResourcesDelegate()],
    home: CommentWallWidget(channelUid: '123456'),
    title: 'jelena',
  )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...