dart - HttpClientRequest无法添加数据 [英] dart - HttpClientRequest failing on adding data
问题描述
我想创建一些简单的单元测试,这里是代码:
I'm trying to create some simple unittests, here's the code:
import 'dart:io';
import 'package:unittest/unittest.dart';
void main() {
test('check if sent data equals expected data', () {
HttpServer.bind('127.0.0.1', 8080)
.then(expectAsync1((HttpServer server) {
server.listen((HttpRequest request) {
expect(request.runtimeType.toString(), equals('_HttpRequest'));
request.fold(new BytesBuilder(), (prev, next) {
prev.addAll(next);
return prev;
})
.then(expectAsync1((BytesBuilder bb) {
var bytes = bb.takeBytes(),
helloString = new String.fromCharCodes(bytes);
expect(helloString, equals('hello'));
request.response.write(helloString);
request.response.close();
server.close();
}));
});
}));
HttpClient client = new HttpClient();
client.get('127.0.0.1', 8080, '/')
.then((HttpClientRequest request) {
request.add('hello'.codeUnits);
return request.close();
});
});
}
给我一个错误:打破异常:'dart:async / stream_impl。 dart':失败断言:line 149 pos 12:'! _isClosed'不是真的。
Gives me an error: Breaking on exception: 'dart:async/stream_impl.dart': Failed assertion: line 149 pos 12: '! _isClosed' is not true.
一些解决方法后,我发现负责的是 request.add('hello'.codeUnits) / code>
After some workaround, I found out that the responsible one is request.add('hello'.codeUnits)
现在我无法向 HttpClientRequest
添加数据。任何解决方法?
So now I have no way to add data to HttpClientRequest
. Any workaround?
推荐答案
您使用什么版本的Dart?我没有能够重现你得到的错误。有关此问题的进度,请参见 http://dartbug.com/13293 。
What version of Dart are you using? I have not been able to reproduce the error you get. See http://dartbug.com/13293 for progress on this issue.
但是代码有很多问题:
- BytesBuilder没有addAll方法
- 使用client.get时请求的内容长度设置为0
- 看起来客户端可能在服务器绑定之前连接。
重写下面的测试运行:
import 'dart:io';
import 'package:unittest/unittest.dart';
void main() {
test('check if sent data equals expected data', () {
expect(HttpServer.bind('127.0.0.1', 8081).then((HttpServer server) {
HttpClient client = new HttpClient();
server.listen((HttpRequest request) {
expect(request.runtimeType.toString(), equals('_HttpRequest'));
request.fold(new BytesBuilder(), (prev, next) {
prev.add(next);
return prev;
}).then((BytesBuilder bb) {
var bytes = bb.takeBytes();
var helloString = new String.fromCharCodes(bytes);
expect(helloString, equals('hello'));
request.response.write(helloString);
request.response.close();
server.close();
});
});
return client.post('127.0.0.1', 8081, '/').then((HttpClientRequest request) {
request.add('hello'.codeUnits);
return request.close().then((HttpClientRequest response) {
return response.statusCode;
});
}).whenComplete(client.close());
}), completion(equals(HttpStatus.OK)));
});
}
这篇关于dart - HttpClientRequest无法添加数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!