다트, 단원 테스트 및 일반적인 비동기 프로그래밍 입문. 그리고 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 :http
패키지에 찬성 HttpClient를 포기하기로 결정했다. 훨씬 더 쉽게 작업 할 수 있으며, 이제는 자체 테스트가 종료됩니다. 분명히 나는 처음으로 돌아 다니는 곳에서 올바르게 처리하지 못했습니다.
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 예,'expect' 문이 평가됩니다. 이것은 중요한 것입니다. 그러나이 프로그램은 모든 테스트가 실행 된 후에도 계속 실행됩니다. 수동으로 프로세스를 종료해야합니다. – mgoodness
@ GünterZöchbauer 당신은 [여기] (http://stackoverflow.com/a/23987275/3029658)를 통해 간접적으로 도움을주었습니다. – mgoodness