gpt4 book ai didi

javascript - module.exports = Promise.all 在测试中不起作用

转载 作者:行者123 更新时间:2023-12-03 04:08:36 46 4
gpt4 key购买 nike

我想在本地创建 PR 之前确保我的服务器正在运行,以测试没有任何问题。

worker.js

我的服务器导出一个 promise

module.exports = Promise.all([
hbsPartialsLoaded,
])
.then(() => {
let server;

if (!isTestEnvironment) {
server = app.listen(config.port);
}

return { server, app };
});

测试

let { expect, request } = require('chai')
.use(require('chai-http'))
.use(require('chai-cheerio'));
const config = require('../../app/config');
const worker = require('../../app/worker');

describe('server response', function () {
worker.then(() => {
before(function () {
server.listen(config.port);
});

it('should return 200', function (done) {
request.get(`http://localhost:${config.port}`, function (err, res, body){
expect(res.statusCode).to.equal(200);
done();
});
});

after(function () {
worker.close();
});
})
});

运行测试

 NODE_ENV=test mocha --timeout 20000 --recursive test/ --compilers js:babel-core/register



0 passing (1ms)

我的测试从未运行过。我怎样才能得到它,以便在运行测试之前等待 sever.js 完成其 promise ?

最佳答案

您没有正确导出 Promise,因此调用是错误的,因为如果 require("worker.js") 在调用 .then< 之前完成,您可能无法收到回调,它应该是 worker().then 而不是 worker.then,但这不是唯一的问题。

worker.js 应该返回一个启动 Promise.all 的函数。因此,将 module.exports = Promise.all... 更改为 module.exports = () => Promise.all...

使用before启动服务器并同步调用。在 it 中,您可以根据需要使用异步函数。

server.listen 对第二个参数有一个回调,它告诉您它何时完成,因此您可以使用 Promise 并在那里解析它。

一个例子:

var expect = require('chai').expect;

describe('x', () => {
before(() => new Promise((resolve, reject) => setTimeout(resolve, 500)));

it('should work', (done) => setTimeout(() => expect(0).to.be.above(0), 500));
});

更适合您的案例的示例:

var expect = require('chai').expect;

var app = require('express')();

describe('x', () => {
before(() => new Promise((resolve, reject) => {
app.listen(3000, () => {
console.log('The server launched');
resolve();
});
}));

it('should work', (done) => {
console.log('I got called after the server got launched! :)');
setTimeout(() => expect(1).to.be.above(0), 500)
});
});

关于javascript - module.exports = Promise.all 在测试中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432353/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com