3

我想测试一种在另一台服务器上执行 POST 的方法:

Future executePost() {
  _client.post("http://localhost/path", body : '${data}').then((response) {
    _logger.info("Response status : ${response.statusCode}");
    _logger.info("Response body : ${response.body}");

    Completer completer = new Completer();
    completer.complete(true);
    return completer.future;
  }).catchError((error, stackTrace) {
    _logger.info(error);
    _logger.info(stackTrace);
  });
}

我正在处理的问题是我的测试方法在“_client.post”返回的未来执行之前结束。

我的测试方法:

test('should be true', () {
  try {
    Future ok = new MyClient().executePost();
    expect(ok, completion(equals(true)));
  } catch(e, s) {
    _logger.severe(e);
    _logger.severe(s);
  }
});

谢谢你的帮助 !

4

1 回答 1

3

您的executePost()方法甚至不返回未来,它返回null.
client.post()返回一个未来,但不使用这个返回值。

尝试将其更改为:

Future executePost() {
  return _client.post("http://localhost/path", body : '${data}').then((response) {
    _logger.info("Response status : ${response.statusCode}");
    _logger.info("Response body : ${response.body}");
    return true;
  }).catchError((error, stackTrace) {
    _logger.info(error);
    _logger.info(stackTrace);
  });
}
于 2014-09-14T16:36:59.513 回答