通用的新功能Dart,單元測試和異步編程。和StackOverflow,就此而言。嘗試圍繞shelf_route構建RESTful服務器並使用HttpClient對其進行測試。HttpClient&unittest
我的測試工作,但他們不會自行退出。相反,我必須手動終止該過程。我嘗試了幾種我在網上找到的方法,但沒有運氣。任何人都可以幫我一把嗎?這裏就是我的工作:
import 'dart:io';
import 'package:unittest/unittest.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as io;
import 'package:toner_track/handlers.dart';
import 'package:toner_track/config.dart';
void main() {
var server;
group('Server tests',() {
var server;
setUp(() {
var handler = const shelf.Pipeline().addHandler(router);
io.serve(handler, HOST, PORT).then((s) {
server = s;
});
});
tearDown(() {
server.close();
});
test('Invalid URL returns 404',() {
new HttpClient().getUrl(Uri.parse('http://$HOST:$PORT'))
.then((HttpClientRequest request) => request.close())
.then(expectAsync((HttpClientResponse response) {
expect(response.statusCode, equals(404));
}));
});
test('GET /printers returns 200',() {
new HttpClient().getUrl(Uri.parse('http://$HOST:$PORT$rootPrintersPath'))
.then((HttpClientRequest request) => request.close())
.then(expectAsync((HttpClientResponse response) {
expect(response.statusCode, equals(200));
}));
});
test('POST /printers returns 201',() {
new HttpClient().postUrl(Uri.parse('http://$HOST:$PORT$rootPrintersPath'))
.then((HttpClientRequest request) {
request.write('{"foo": 42}');
return request.close();
})
.then(expectAsync((HttpClientResponse response) {
expect(response.statusCode, equals(201));
}));
});
});
}
UPDATE:決定放棄的HttpClient有利於http
包。更容易處理,我的測試現在終止。顯然,我在第一次復飛時沒有正確處理一些事情。下面是上面的代碼看起來像現在:
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:unittest/unittest.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as io;
import 'package:toner_track/handlers.dart';
import 'package:toner_track/config.dart';
void main() {
group('Server tests',() {
var server;
setUp(() {
var handler = const shelf.Pipeline().addHandler(router);
return io.serve(handler, HOST, PORT).then((s) {
server = s;
});
});
tearDown(() {
server.close();
});
test('Invalid URL returns 404',() {
http.get('http://$HOST:$PORT').then(expectAsync((response) {
expect(response.statusCode, equals(404));
}));
});
test('GET /printers returns 200',() {
http.get('http://$HOST:$PORT$rootPrintersPath').then(expectAsync((response) {
expect(response.statusCode, equals(200));
}));
});
test('POST /printers returns 201',() {
http.post('http://$HOST:$PORT$rootPrintersPath', body: {"foo": "42"}).then(expectAsync((response) {
expect(response.statusCode, equals(201));
}));
});
});
}
執行是否達到並執行'expect'行?你有輸出嗎? –
@GünterZöchbauer是的,「預期」陳述被評估,這是重要的事情。但是,即使在所有測試運行(並通過)之後,該程序仍會繼續運行。我必須手動終止該過程。 – mgoodness
@GünterZöchbauer你最終通過[here](http://stackoverflow.com/a/23987275/3029658)間接幫助。 – mgoodness