Как смоделировать пакет google_maps_flutter для тестов на флаттер? - PullRequest
0 голосов
/ 20 января 2019

Я недавно начал испытывать трепетание, но как только я собирался написать несколько тестов виджетов, я заметил, что не очень уверен, как макетировать пакет Google Maps Flutter.

Многие примеры, которые я видел, включают использование библиотеки "mockito" для макетирования классов, но это предполагает, что виджет Google Maps будет вставлен в виджет для тестирования. К сожалению, с их документацией и руководством по запуску, это не представляется возможным:

class MapsDemo extends StatefulWidget {
  @override
  State createState() => MapsDemoState();
}

class MapsDemoState extends State<MapsDemo> {

  GoogleMapController mapController;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(15.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
          Center(
            child: SizedBox(
              width: 300.0,
              height: 200.0,
              child: GoogleMap(
                onMapCreated: _onMapCreated,
              ),
            ),
          ),
          RaisedButton(
            child: const Text('Go to London'),
            onPressed: mapController == null ? null : () {
              mapController.animateCamera(CameraUpdate.newCameraPosition(
                const CameraPosition(
                  bearing: 270.0,
                  target: LatLng(51.5160895, -0.1294527),
                  tilt: 30.0,
                  zoom: 17.0,
                ),
              ));
            },
          ),
        ],
      ),
    );
  }

  void _onMapCreated(GoogleMapController controller) {
    setState(() { mapController = controller; });
  }
}

Обратите внимание, что виджет GoogleMaps не может быть передан, потому что onMapCreated является обязательной функцией, и эта функция использует метод закрытого класса (предоставьте родительскому виджету доступ к GoogleMapsController). Многие другие примеры ложных функций mockito, у которых нет такой функции обратного вызова для установки состояния.

Похоже, что я не видел других пакетов, которые могли бы эффективно смоделировать виджет GoogleMaps, поэтому у меня нет никакого примера для подражания. В идеале я ожидал такого поведения, как proxyquire или sinon в node.s (где вам не нужно передавать макетированные библиотеки в function.constructors), но похоже, что макетированные классы должны быть переданы в проверенные виджеты.

Есть ли другие идеи о том, как макетировать эту библиотеку для тестирования? Или я должен просто жить с тестированием реальной функциональности?

...