我用的是hapi,不是express。超级测试还应该有效吗?
如果是这样,有没有一种快速方法可以更改我的代码以使其运行?
我的测试看起来像这样,基于文档 https://github.com/visionmedia/supertest:
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)
......
});
但它给了我这个错误:
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)
这是我的应用程序代码:
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();
服务器.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;