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

时间:2017-03-02 11:58:53

标签: redis promise mocha bluebird supertest

我使用promises测试我的休息应用程序(使用节点上的hapi制作)和mocha(3.2)以及supertest(3.0)。

超时后停止并返回错误:

  

错误:超出2000毫秒超时。对于异步测试和挂钩,请确保" done()"叫做;如果返回Promise,请确保它已解决。

我已经尝试增加超时但它没有工作。

如果我添加done()来电,我会:

  

分辨率方法过于规范。指定回调返回Promise;不是两个。

你能帮我吗?

这是我的测试:

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

});

1 个答案:

答案 0 :(得分:0)

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

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