Я попытался написать модульный тест для промежуточного программного обеспечения Flutter Redux, содержащего запрос http. Но я не могу найти правильный способ сделать это.
Вот мой код промежуточного программного обеспечения:
List<Middleware<AppState>> appMiddleware([Dio dio]) {
if (dio == null) {
dio = Dio(options);
}
return [
TypedMiddleware<AppState, FetchArticlesAction>(_fetchArticleList(dio)),
];
}
Middleware<AppState> _fetchArticleList(Dio dio) {
return (Store<AppState> store, action, NextDispatcher next) async {
next(action);
try {
final response = await dio.post(
'/system/articles',
data: {'page': 0, 'pagenum': 20},
);
if (response.data['Code'] == 0) {
List<Article> articles = response.data['Data'].map<Article>((item) {
return Article.fromJson(item);
}).toList();
store.dispatch(FetchArticlesSucceededAction(articles));
} else {
store.dispatch(FetchArticlesFailedAction(response.data['Msg']));
}
} catch (e) {
store.dispatch(FetchArticlesFailedAction(e.toString()));
}
};
}
Вот мой тестовый код:
test('should store articles into store when success', () async {
final dio = DioMock();
final store = Store<AppState>(
appReducer,
initialState: AppState(),
middleware: appMiddleware(dio),
);
final Response response = Response(
statusCode: 200,
data: {
"Code": 0,
"Msg": "请求成功",
"Data": [
{
"Id": 2,
"CreatedAt": "1",
"UpdatedAt": "1",
"Title": "1",
"Abstract": "1",
"Cover": "1",
"Content": "1"
},
{
"Id": 1,
"CreatedAt": "1",
"UpdatedAt": "1",
"Title": "1",
"Abstract": "1",
"Cover": "1",
"Content": "1"
}
]
},
);
List<Article> articles = response.data['Data'].map<Article>((item) {
return Article.fromJson(item);
}).toList();
when(dio.post('/system/articles', data: {'page': 0, 'pagenum': 20}))
.thenAnswer((_) async => response);
store.dispatch(FetchArticlesAction());
expect(articlesSelector(store), articles);
});
Я отладил тест, он закончится до обратного вызова промежуточного программного обеспечения. Есть ли способ исправить это, дождавшись завершения обратного вызова до ожидаемой функции? Или другой способ тестирования промежуточного программного обеспечения.