Итак, я провожу некоторые модульные тесты для моего провайдера http.
В одном из моих тестов я хочу убедиться, что когда я выполняю вызов POST и получаю сообщение об ошибке со статусом 409, я делаю затемвызов PATCH и все работает.
Это мой код
Future<IdentityResponse> _createUser(dynamic body) {
return http
.post(api, body: json.encode(body))
.catchError((err) {
return _isStatusCode(err, 409) ? _patchUser(body) : throw (err);
});
}
Я использую mockito, и сначала попытался вернуть ответ, подобный этому:
when(http.post(argThat(startsWith(api)), body: anyNamed('body')))
.thenAnswer((_) async => Response("user exists", 409);
И это работает ... вроде.Я улавливаю ошибку, но потом не могу получить код состояния, я получаю только сообщение «пользователь существует»
Если я перехожу на структуру, которую возвращает бэкэнд, то есть {"error": { "code": 409 }}
, и я делаюэто:
when(http.post(argThat(startsWith(api)), body: anyNamed('body')))
.thenAnswer((_) async => Response(json.encode(fakeErrorResponse), 409);
Тогда мой перехват уже не работает (??)
Затем я попытался вернуть ошибку вместо ответа, например:
when(http.post(argThat(startsWith(api)), body: anyNamed('body')))
.thenAnswer((_) => Future.error(fakeErrorResponse));
Теперь мой перехват работает снова, но я получаю сообщение об ошибке _ImmutableMap, и я не вижу простого способа извлечь из него мои данные.
Как я могу издеваться над ошибкой http, которая возвращает желаемое тело, ине простая строка?
Спасибо