当 app 是 Promise 时启动 mocha chai 测试

Posted

技术标签:

【中文标题】当 app 是 Promise 时启动 mocha chai 测试【英文标题】:Start mocha chai test when app is a Promise 【发布时间】:2021-11-22 08:43:25 【问题描述】:

服务器异步启动的代码非常简化

// server/app.js
let appPromise = new Promise((resolve, reject) => 
   [..async stuff..]
   const app = express()
   const server = http.createServer(app)
   server.listen(config.port, config.ip, () => ...
)    
export default appPromise;

我从哪里开始测试:

// test/index.js
require('@babel/core').transform('code', );
require('@babel/register');
let tests = require('./tests.js');

module.exports = tests;

实现测试的代码:

// test/test.js
const app = require('../server/app')
const chai = require('chai')
const chaiHttp = require('chai-http')
chai.use(chaiHttp);
chai.should();
app.then(() => 
    describe(..tests...)
)

我得到的错误:

.then() is not a function

怎么了?

【问题讨论】:

【参考方案1】:

我相信您的问题是您使用的是 ES6 导出,但没有以 ES6 方式导入。

您导入的“应用程序”应该是:

import appPromise from '../server/app';

此外,您在“app.js”中的承诺似乎没有解决任何问题,如果这不是遗漏,您需要在 .then() 的承诺中解决一些问题工作。这是一个工作示例:

const appPromise = new Promise((resolve, reject) => 
    resolve('appPromise resolved');
);

【讨论】:

以上是关于当 app 是 Promise 时启动 mocha chai 测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mocha 测试 Promise 时发生错误

使用 Promise 并跳过代码时,Mocha 测试超时,为啥?

Mocha.js 101同步异步与 Promise

对 Promise 结果运行多个测试 - Mocha

用 Mocha 测试 Promise [重复]

如何用 Mocha 测试 Promise catch