Тест не проходит с помощью `flutter test`, но проходит при отладке из тестового файла - PullRequest
0 голосов
/ 18 июня 2020

Как я могу прочитать файл, используя относительный путь при запуске flutter test?

При запуске flutter test File('path/to/file') требуется абсолютный путь, но относительный путь работает при отладке.

Я чувствую, что упускаю что-то очевидное. Используя VS Code, я могу запустить тест, запустив отладку в одном из тестовых файлов. Таким образом, тест будет пройден при использовании относительного пути для чтения файла. Однако, когда я запускаю flutter test с терминала, тот же тест терпит неудачу, потому что он не может найти файл, если я не изменю его для использования абсолютного пути, и в этом случае тест будет пройден.

Это строка кода в тесте, который пытается создать модель из файла json:

final tUserModel = UserModel.fromJson(json.decode(fixture('user_cached.json')));

Функция fixture импортируется из другого файла и реализуется следующим образом:

import 'dart:io';
String fixture(String name) => File('test/fixtures/$name').readAsStringSync();

При использовании этого относительного пути я получаю следующий вывод с терминала:

flutter test
00:03 +3 ~1 -1: loading /home/user/MyApp/test/features/user/data/datasources/user_local_data_source_test.dart [E]                                                                                       
Failed to load "/home/user/MyApp/test/features/user/data/datasources/user_local_data_source_test.dart": Cannot open file, path = 'test/fixtures/user_cached.json' (OS Error: No such file or directory, errno = 2)
dart:io                                                                     _File.readAsStringSync
fixtures/fixture_reader.dart 3:60                                           fixture
features/user/data/datasources/user_local_data_source_test.dart 27:40       main.<fn>
package:test_api                                                            Declarer.group
package:flutter_test/src/test_compat.dart 226:13                            group
features/user/data/datasources/user_local_data_source_test.dart 25:3        main
===== asynchronous gap ===========================
package:test_api                                                            RemoteListener.start
/tmp/flutter_tools.DRSZQD/flutter_test_listener.IPDUJJ/listener.dart 16:25  serializeSuite
/tmp/flutter_tools.DRSZQD/flutter_test_listener.IPDUJJ/listener.dart 43:36  main
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, 1.19.0-4.1.pre, on Linux, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.0)
[✓] VS Code (version 1.46.0)
[✓] Connected device (3 available)

• No issues found!
  • Как я могу заставить flutter test работать с относительным путем к файлу?
  • Есть ли другой способ запустить все тесты из VS Code?

1 Ответ

0 голосов
/ 02 июля 2020

Попробуйте это.

String fixture(String name) {
  var dir = Directory.current.path;
  if (dir.endsWith('/test')) {
    dir = dir.replaceAll('/test', '');
  }
  return File('$dir/test/fixtures/$name').readAsStringSync();
}

Проблема поднималась здесь несколько раз: https://github.com/flutter/flutter/issues/20907

...