Как импортировать файлы тестовых утилит внутри ваших тестов на Dart/Flutter

У меня есть несколько модульных тестов и несколько классов, которые связаны только с тестами, например, фабрики для моих моделей, некоторые расширения на mockito и другие...

Проблема в том, что когда я пытаюсь импортировать эти файлы из своих тестов, я могу просто импортировать их с относительными путями, скажем, у меня есть эти утилиты:

  • test/src/test_utils/factories.dart
  • test/src/test_utils/mocks.dart
  • test/src/test_utils/mockito_extensions.dart

Как я не могу этого сделать

Но когда я пытаюсь импортировать их из своих тестов, я не могу их найти с помощью

import 'package:myapp/test_utils/mocks.dart';

or:

import 'package:myapp/src/test_utils/mocks.dart';

Единственный, который работает

Единственный способ импортировать их — по относительным путям, например:

import '../../test_utils/mocks.dart';

Вопрос

Я хотел бы понять, что здесь происходит, почему мои тесты не могут найти класс test utils в импорте и как лучше всего это сделать.


person Daniel Gomez Rico    schedule 30.09.2020    source источник


Ответы (1)


В макете пакета pub формат URI package: используется для файлов под lib/. Это общедоступные библиотеки, которые можно использовать вне пакета, поэтому они связаны с именем пакета. Файлы под test/ являются частными для пакета, и на них не нужно ссылаться по имени пакета — на них можно ссылаться только из соседних файлов и каталогов, поэтому достаточно относительного импорта. Формат package: URI разработан в первую очередь потому, что он позволяет импортировать в другие пакеты, к которым нет стабильного относительного пути.

См. https://dart.dev/tools/pub/package-layout#public-libraries

Рекомендуемым подходом является использование относительного импорта.

person Nate Bosch    schedule 01.10.2020
comment
Спасибо за объяснение - person Daniel Gomez Rico; 01.10.2020