I'm trying to make unit tests for Redstone microframework with PostgreSQL extension. Test of simple Route without pgsql request works fine. But when Route contains pgsql requests test fails because resp.statusCode=500. When I call application function with pgsql request directly from test it returns error because app.request is null. Here is code sample:
//--------------------------------------------------------
// Redstone application
library rs_app;
import 'dart:async';
import 'package:redstone/server.dart' as app;
import 'package:redstone_mapper/plugin.dart';
import 'package:redstone_mapper_pg/manager.dart';
Future startServer() {
var uri = "postgres://127.0.0.1:5432/testdb";
var dbManager = new PostgreSqlManager(uri, min: 1, max: 3);
app.addPlugin(getMapperPlugin(dbManager));
app.setupConsoleLog();
return app.start(address: '127.0.0.1', port: 8100);
}
PostgreSql get pgsql => app.request.attributes.dbConn;
@app.Route("/simple")
simpleAnswer() => "Hello, world!";
@app.Route("/complex")
complexAnswer() => getMaxId();
Future getMaxId() {
return pgsql.query("select max(id) as id from t_test", String)
.then((id) {
return new Future.value(id[0]['id']);
});
}
//--------------------------------------------------------
// Unit tests
library rs_app_test;
import 'package:rs_app/rs_app.dart' as rs_app;
import 'package:redstone/server.dart' as app;
import 'package:redstone/mocks.dart';
import 'package:unittest/unittest.dart';
main() => makeTests();
void makeTests() {
setUp(() => app.setUp([#rs_app]));
tearDown(() => app.tearDown());
test('simple - PASS', () {
var req = new MockRequest('/simple');
return app.dispatch(req).then((resp) {
expect(resp.statusCode, equals(200));
expect(resp.mockContent, equals("Hello, world!"));
});
});
test('complex - FAIL', () {
var req = new MockRequest('/complex');
return app.dispatch(req).then((resp) {
expect(resp.statusCode, equals(200));
expect(resp.mockContent, equals("0297"));
});
});
test('direct - ERROR', () {
return rs_app.getMaxId().then((id) {
expect(id, equals("0297"));
});
});
}
I understand that dbManager is not initialized correctly, but how I must initialize it?
Aucun commentaire:
Enregistrer un commentaire