Ich benutze hapi, nicht ausdrücken. Sollte Supertest noch funktionieren?Kann Supertest mit Hapi verwendet werden?
Wenn ja, gibt es eine schnelle Möglichkeit, meinen Code zu ändern, damit er ausgeführt wird?
Mein Test sieht wie folgt aus, basierend auf der documentation:
import tape = require('tape');
const supertest = require('supertest');
const app = require('../../../../src/app');
tape('creates new user in database', function (assert) {
supertest(app)
.get('/ekapi/v1/signup')
.expect(200)
......
});
aber es gibt mir diese Fehlermeldung:
dist/server/app/node_modules/supertest/lib/test.js:55
var addr = app.address();
^
TypeError: app.address is not a function
at Test.serverAddress (/home/rje/projects/ekaya/dist/server/app/node_modules/supertest/lib/test.js:55:18)
Hier ist meine App-Code:
app.ts
import './core/externalTypes/imports';
import 'reflect-metadata';
import kernel from './core/inversify.config';
import {IServer} from './core/types/IServer';
let server = kernel.get<IServer>("IServer");
server.start();
server.ts
import _ = require('lodash');
import * as hapi from "hapi";
import { injectable, inject } from "inversify";
import { IServer } from "../core/types/IServer";
import { ISignUpRoute } from "../core/types/ISignUpRoute";
import { IRouteHandler } from "../core/types/IRouteHandler";
import { IDatabase } from "../core/types/IDatabase";
import { IConfig } from "../core/types/IConfig";
import { IValidator } from "../core/types/IValidator";
@injectable()
class Server implements IServer
{
_db : IDatabase;
_server: hapi.Server;
_config: IConfig;
_validator: IValidator;
_routes: [IRouteHandler];
constructor(
@inject("IDatabase") db: IDatabase,
@inject("IConfig") config: IConfig,
@inject("IValidator") validator: IValidator,
@inject("ISignUpRoute") signUpRoute: ISignUpRoute)
{
this._db = db;
this._config = config;
this._validator = validator;
this._routes = [signUpRoute];
this._server = new hapi.Server();
this._server.connection({
host: '0.0.0.0',
port: this._config.webservice_port,
routes: { cors: true }
});
this.addRoutes();
}
start() : void
{
this._server.start((err : any) => {
if (err)
throw err;
console.log('Hapi server running at: ', this._server.info.uri);
});
}
addRoutes() : void {
const self = this;
this._routes.map(function(routeHandler : IRouteHandler) {
self._server.route(routeHandler.getRoute());
});
}
}
export = Server;
Superagent beschäftigt sich mit Knoten HTTP-Server ausgeführt werden. Versuchen Sie, ['server.listener'] (http://hapijs.com/api#serverlistener) zu liefern, das könnte funktionieren. – estus
Aber wenn ich den Server manuell starten muss, um server.listener zum Supertest zu bekommen, dann kann ich das auch einfach manuell starten und abfragen unter https://github.com/request/request. In diesem Fall gibt es keinen Vorteil für Supertests. – Richard
Ihr Code erwähnt nicht, was 'app.ts' exportiert. Wenn die Serverinstanz exportiert würde, könnten Sie möglicherweise 'superestest (app.listener)' ausführen. – estus