如何在Dart中模拟HTTP错误响应?

时间:2019-02-28 15:53:28

标签: testing dart mockito

所以我正在为我的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错误,该错误返回所需的主体而不是简单的String?

谢谢

0 个答案:

没有答案