На этот вопрос был дан ответ на канале Акведук Slack , поэтому я перемещаю его здесь, чтобы его было легче найти.
Ответы на ответы :
Вам нужно будет запустить TestHarness
со смешанным TestHarnessORMMixin
. После этого вы можете использовать MnagedObject (si c), однако сочтете нужным.
joeconwaystk продолжил :
Да, что сказал Редукс… каркас обрабатывает TDD с ORM, создавая временную схему на сервере базы данных во время тестирования (с помощью the TestHarnessORMixin)
Поэтому я обновил файл test / harness / app.dart, чтобы он выглядел так:
class Harness extends TestHarness<MyChannel> with TestHarnessORMMixin {
@override
Future onSetUp() async {
await resetData();
}
@override
Future onTearDown() async {}
@override
ManagedContext get context => channel.context;
}
И мой тест выглядел так:
Future main() async {
final harness = Harness()..install();
test('DatabaseBuilder returns multiple entities', () {
List<MyEntity> entities = [];
entities.add(MyEntity());
expect(entities.length, greaterThan(0));
});
}
Даже если я не использую жгут напрямую, его установки достаточно, чтобы устранить ошибку.
Если вам не нравится этот метод, я нашел еще один вариант - создать класс модели, который отражает _MyEntity без расширения ManagedObject:
class MyEntityModel implements _MyEntity {
@override
int id;
@override
int myValue;
}
. Затем его можно сопоставить с MyEntity, когда фактически вставив в базу данных. Кажется, лучше просто установить тестовое устройство и использовать MyEntity напрямую, вот что я и сделал.
Для получения дополнительной информации о настройке тестирования см. это видео и документацию .