首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有可能在hapi中使用supertest吗?

有可能在hapi中使用supertest吗?
EN

Stack Overflow用户
提问于 2016-05-25 14:27:21
回答 2查看 2.8K关注 0票数 6

我用的是哈皮,不是特快。超级测试还能用吗?

如果是这样的话,是否有一种快速的方法来更改我的代码以使其运行?

我的测试如下所示,基于文档

代码语言:javascript
复制
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)
    ......
});

但它给了我一个错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-26 07:54:59

埃斯特斯的回答奏效了。我需要在最外层的类hapi.Server中导出app.js。然后将其listener属性传递给tape

然后,我不得不在测试结束时使用tape.onFinish( () => server.stop() );来停止服务器。

票数 1
EN

Stack Overflow用户

发布于 2016-08-19 10:17:10

用js编写的用于测试的最小代码示例:

代码语言:javascript
复制
'use strict';

const Hapi = require('hapi');
const should = require('chai').expect
const request = require('supertest')


const server = new Hapi.Server();
server.connection({ port: 3000 });

server.route({
  method: 'GET',
  path: '/',
  handler: function (request, reply) {
    reply('Hello, world!');
  }
});

describe('server', function() {
  it('server', function(done) {
    request(server.listener).get('/').expect(200, function(err, resp) {
      should(resp.text).equal('Hello, world!')
      done()
    })
  })
})

如果"hapi": "^16"按原样工作的话。

如果是"hapi": "^8.1.0",则需要手动运行server.start() ber前沿请求。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37440117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档