使用 supertest 和 mocha 进行测试无法解决 promise

Testing with supertest and mocha fails to resolve promise

我正在用 mocha (3.2) 和 supertest (3.0) 使用 promises 测试我的其余应用程序(在节点上用 hapi 制作)。

它在超时和 returns 错误后停止:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

我已经尝试增加超时,但没有成功。

如果我添加一个 done() 调用,我得到:

Resolution method is overspecified. Specify a callback or return a Promise; not both.

你能帮帮我吗?

这是我的测试:

...
const request = require('supertest');
const redis = require('redis');
const bluebird = require("bluebird");
bluebird.promisifyAll(redis.RedisClient.prototype);
const config = require('../src/config/tests');

describe('Routing', function () {

    let url = 'http://localhost:8080';

    let storage = redis.createClient({
        host: config.config.host,
        port: config.config.port
    });

    it('should pass', function (done) {
        let username = 'user',
            userHash = md5(username),
            data = {
                user_id: username,
                sess_id: 'session'
            };
        return storage.delAsync("users:" + userHash)
            .then(result => {
                return request(url)
                    .post('/login')
                    .send(data)
                    .expect(201)
                    .expect({info: true});
            })
            .then(response => {
                return storage.hgetallAsync("users:" + userHash);
            })
            .then(result => {
                assert({user_id: userHash}, result);
            })
    });

});

在函数签名中指定 done 参数将测试标记为异步。不调用它会导致待定测试。

如果用function (done) { ... }指定,应该调用。这就是错误所说的。如果通过返回承诺使规范异步,则不应指定它。