对两个不同端口

时间:2017-12-15 20:58:32

标签: javascript express jestjs

我正在测试一个脚本,其中一个函数发出http请求,然后在另一个函数中调用。

第一个功能是:

export function getFeedData (sub) {
    if (getFeedId(sub) === 2) {
        return axios.get('http://localhost:4000').then((data) => JSON.parse(data));
    }
}

第二个是:

export function isDelay (sub, stop) {
    return getFeedData(sub).then((data) => {
        return data.entity.filter((entityObj) => {
            return entityObj.stop_time_update !== undefined;
        });
    }).then((newData) =>  {
        console.log(newData);
    }).catch((err) => {
        console.log(err);
    });
}

他们有两个不同功能的原因是第二个最终会更长,我想把所有内容分开,以简化并使我的代码更具说明性。

这些功能的测试目前看起来像这样:

import express from 'express';
import { getFeedId, getFeedData, reverseStop, isDelay } from '../mocks/apiMock';

const app = express();
app.use(express.static('../mocks/MockData.json'));

it('returns json data', (done) => {
    app.listen(4000, function () {
        expect.assertions(2);
        return getFeedData('L').then((data) => {
            expect(data).toBeDefined();
            expect(data.header.gtfs_realtime_version).toBe('1.0');
        });
    });
    done();
});

it('returns either the delay or time until the next train' , (done) => {
    app.listen(4000, function () {
        isDelay('L', 'Lorimer St');
    });
    done();
});

第二次测试没有运行,因为它试图收听已经占用的端口。

我想到的解决方案是将app.listen() 0作为其第一个参数传递,以便侦听随机端口。但是,我不知道如何获得请求特定端口的axios请求。有没有办法做到这一点?或者也许是我问题的更好解决方案?请善待,因为这是我第一次真正独立地开始创建节点/快速服务器,我在发布这里之前尽我所能来研究问题。

1 个答案:

答案 0 :(得分:0)

您应仅使用一个特定的HTTP服务器端口,例如:4000

然后,您应该像这样设置HTTP服务器:

const port = 4000;
let server
beforeAll((done) => {
  server = app.listen(port, () => {
    done();
  })
})

afterAll((done) => {
  server && server.close(done)
})

// Your test suites and test cases.

然后您可以测试您的功能,它们向同一端点发出HTTP请求,例如http://localhost:4000