Я разрабатываю приложение android / ios во флаттере, и я решил использовать избыточность для управления своим состоянием.
Я пишу модульные тесты для моих действий избыточности, которые были реализованы используя пакет async_redux .
Я следую отличным рекомендациям, изложенным для тестирования автором пакета, но я не уверен, как высмеивать отправку дальнейших действий из моего действия проверяется.
Например, ниже LogoutAction
отправляет DeleteDatabaseAction
и ожидает его завершения:
class LogoutAction extends ReduxAction<AppState> {
@override
Future<AppState> reduce() async {
await dispatchFuture(DeleteDatabaseAction());
return AppState.initialState();
}
}
class DeleteDatabaseAction extends ReduxAction<AppState> {
@override
FutureOr<AppState> reduce() {
throw StateError(
'Unwanted call to runtime implementation of DeleteDatabaseAction',
);
}
}
void main() {
final store = Store<AppState>(initialState: AppState(loggedIn: true));
final storeTester = StoreTester.from(store);
test('Logout action should return correct state and not throw StateError', () async {
storeTester.dispatch(LogoutAction());
TestInfo<AppState> info = await storeTester.wait(LogoutAction);
expect(info.state.loggedIn, false);
});
}
Я хочу проверить только проверяемое действие и отложите все дальнейшие вызовы действий.
т.е. Как я могу смоделировать / заглушить методы dispatch
и dispatchFuture
на ReduxAction
, чтобы реализация DeleteDatabaseAction
времени выполнения не запускалась?
До сих пор я пытался:
Внедрить DeleteDatabaseAction
, используя get_it и ввести макет во время теста
- У меня есть более 100 действий, которые будут теперь нужно добавить в мой контекст
- Некоторые действия имеют параметры, которые меняются в зависимости от того, откуда они вызываются, поэтому их нельзя зарегистрировать при запуске приложения
подкласс Store
, переопределить вышеуказанные методы и использовать подкласс в моем тесте здесь final store = Store<AppState>(initialState: AppState(loggedIn: true))
- Я не смогу отправить тестируемое действие, так как оно использует то же хранилище в реализации теста async_redux
- Здесь:
storeTester.dispatch(LogoutAction());
- Создайте отдельную реализацию
Dispatcher
, внедрите это и переопределите с помощью макета во время тестов - Это будет работать, но это новый фреймворк, я могу go этот маршрут, но теперь я отклоняюсь от хорошо документированной среды, предоставленной asyn_redux