Как я могу издеваться над ответом об ошибке http в дартс? - PullRequest
0 голосов
/ 28 февраля 2019

Итак, я провожу некоторые модульные тесты для моего провайдера 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, которая возвращает желаемое тело, ине простая строка?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...