服务器集成测试

时间:2021-03-24 19:13:02

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

我有服务器应该在开始前执行一些工作,并记录成功。例如:

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. 请求/响应工作正确

问题:

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

1 个答案:

答案 0 :(得分:0)

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();
                    });
                });
            }
        });
    });
});