#dart #flutter #flutter-test
#dart #flutter #flutter-test
Вопрос:
У меня есть приложение Flutter, которое отображает данные после входа пользователя в систему. У меня есть модульные тесты и тесты виджетов, и теперь я хотел бы написать свой первый интеграционный / сквозной тест, чтобы протестировать весь рабочий процесс «счастливого пути», в котором пользователь входит в систему и просматривает данные.
Когда приложение переходит к вызову login API (GET login_api_path) Я хочу вернуть некоторый предопределенный JSON для отображения на экране, а не отправлять реальный запрос на сервер.
Разумный ли это подход, и если да, то каков наилучший способ сделать это? Большинство ресурсов, которые я нашел, были специально предназначены для модульного тестирования.
Ответ №1:
Вот подход, с которым я пошел:
Создайте макет клиента, который использует Dart http MockClient:
import 'package:http/testing.dart';
import 'package:http/http.dart';
MockClient integrationTestMockClient = MockClient((request) async {
switch (request.url.toString()) {
case 'https://staging.company.com/api/customer/123':
return Response('{"customer": "123", "name": "Jane Jimmy"}', 200);
case 'https://staging.company.com/api/customer/155':
return Response('{"customer": "155", "name": "Gregor"}', 200);
}
}
Теперь вам нужно передать свой макет клиента в ваше приложение, когда вы запускаете свое приложение в интеграционных тестах, например test_driver/app.dart
import 'mock_client.dart';
void main() async {
enableFlutterDriverExtension();
final app = await initializeApp(
integrationMockClient,
);
runApp(app);
}
Возможно, вам потребуется провести рефакторинг вашего нетестового кода, чтобы при запуске приложения вы могли внедрить клиент. Либо реальный клиент, либо макет клиента при тестировании.
import 'package:http/http.dart';
void main() => initializeApp(Client());