所以我正在为我的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?
谢谢