【问题标题】:Integration test for server服务器集成测试
【发布时间】:2021-03-24 19:13:02
【问题描述】:

我的服务器应该在启动之前执行一些工作,并记录成功。例如:

const http = require('http');

function startServer() {
    const server = http.createServer((req, res) => {
        res.write('hello\n');
        res.end();
    }).listen(3000);
    console.log('server is ready');
}

//as 'job' we will use timer
setTimeout(startServer, 10000);

我需要创建将检查的集成测试:

  1. 日志包含有关服务器准备就绪的信息
  2. 请求/响应工作正确

问题:

  • 我应该为每个测试用例或足够的单个实例运行服务器吗?
  • 启动服务器之前的作业需要一些时间。 我怎么知道什么时候需要发送 要求?我不能依赖日志,因为在这种情况下,第二次测试将 取决于第一个结果。

【问题讨论】:

  • 为什么不使用 async-await ??
  • 如果您在测试之间重用组件实例,则一个测试可能会污染另一个重用相同组件的测试的结果。如果您不重用组件,那么您可能会花费额外的时间来设置和拆除每个测试。 可以权衡利弊,并自行决定“应该”做什么。
  • 对于您的第二个问题,请包含一个由客户端和服务器通用的测试框架拥有的编排组件。让服务器在达到侦听状态时通知协调器。让客户端等待协调器告诉它是提交请求的适当时间。

标签: javascript node.js testing server integration-testing


【解决方案1】:

Wyck,你建议使用观察者模式吗?类似的东西:

describe('app', () => {
    let orchestrator;
    let process;

    beforeAll(() => {
        jest.setTimeout(50000);
        orchestrator = (function () {
            const listeners = [];
            let serverIsReady = false;
            return {
                addListener: fn => {
                    listeners.push(fn);
                    fn(serverIsReady);
                },
                setServerIsReady: status => {
                    serverIsReady = status;
                    listeners.forEach(item => item(status));
                },
            }
        })();
    });
    
    test('server is ready', done => {
        process = spawn('node', ['./app.js']);
        process.stdout.on('data', data => {
            expect(`${data}`).toContain('server is ready');
            orchestrator.setServerIsReady(true);
            done();
        });
    });

    test('server return response', done => {
        orchestrator.addListener(serverIsReady => {
            if (serverIsReady) {
                http.get('http://localhost:3000', res => {
                    res.on('data', chunk => {
                        expect(`${chunk}`).toContain('hello');
                        done();
                    });
                });
            }
        });
    });
});

【讨论】:

    猜你喜欢
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2018-06-11
    • 2011-08-17
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多