用摩卡expressiontesting:基于承诺的testing不会自行运行?

我有两个testing文件。 当只有test1.js存在时,没有testing运行,并且mocha报告“0通过”testing。 当test1.js和test2.js存在,但都依赖于承诺,那么仍然没有testing运行,摩卡仍然报告“0通过”。 但是,当其中一个testing被修改为不使用诺言时,摩卡运行两个testing,他们成功。 有没有搞错? 这是我的文件:

index.js:

require('./server').then( function(server) { server.listen(8080, function() { console.log("Started server"); }); ); 

server.js:

 var express = require('express'); var server = express(); module.exports = new Promise((function(resolve, reject) { return resolve(server); })); 

test1.spec.js:

 require('./server').then(function(server) { describe('Test Suite #1', function () { it('should run test #1', function testSomething(done) { return done(); }); }); }); 

test2.spec.js(用作promise的server.js,testing运行):

 require('./server').then(function(server) { describe('Test Suite #2', function () { it('should run test #2', function testSomethingElse(done) { return done(); }); }); }); 

test2.spec.js(server.js 作为承诺使用,两个testing运行):

 var server = require('./server'); describe('Test Suite #2', function () { it('should run test #2', function testSomethingElse(done) { return done(); }); }); 

要运行它们,我只需要安装并运行nodejs,express和mocha:

 % mocha "*.spec.*" 

我知道在这些例子中我没有使用服务器variables,但是当然,真正的testing需要返回一个promise,因为有时server.js正在访问configuration数据的远程系统。 我可以解决这个问题,但任何帮助理解这里发生的事情将不胜感激!

你需要描述和定义你所有的testing同步。 否则,他们不会被摩卡识别。 如果你有一些asynchronous设置,使用before或beforeEach函数:

 describe('Test Suite #1', function () { var server; before(function(done){ require('./server').then(aServer => { server = aServer; done(); }); }); it('should run test #1', function testSomething(done) { return done(); }); });